JavaScript高级程序设计学习笔记--变量、作用域和内存问题
2024-10-10 19:08:31
传递参数
function setName(obj){
obj.name="Nicholas";
obj=new object();
obj.name="Greg";
}
var person=new Object();
setName(person);
alert(person.name); //"Nicholas"
在函数体内重新new一个Object,并将它赋值为"Greg",但在函数外部访问name属性时,其值仍为"Nicholas".实际上,当函数内部重写obj时,这个变量引用的就是一个局部对象了。
而这个局部对象会在函数执行完毕后立即销毁。
检测类型
如果变量的值是一个对象或null,则typeof操作符会像下面例子中所示的那样返回"object";
var n=null;
var o=new object();
alert(typeof n); //object
alert(typeof o); //object
延长作用域链
当执行流进入下列任何一个语句时,作用域链就会得到加长:
try-catch 语句的catch块
with语句
function buildUrl(){
var qs="?debug=true";
with(location){
var url=href+gs;
}
return url;
}
在此,with语句接收的是location对象,因此其变量对象中就包含了location对象的所有属性和方法。
没有块级作用域
if(true){
var color="blue";
}
alert(color);
如果是在C,C++或是JAVA中,color会在if语句执行完毕后被销毁,但在javascript中,if语句的变量声明会将变量添加到当前的执行环境。在使用for语句时尤其要牢记这一差异,如:
for(int i=0;i<10;i++){
doSomething();
}
alert(i); //
最新文章
- sqlServer去除字段中的中文
- JS的prototype和__proto__ Constructor
- HTML学习之canves元素
- Oracle备份与恢复之exp/imp
- HDFS的运行原理(转)
- Missing artifact com.sun:tools:jar:1.5.0:system 补充
- MySQL Error Handling in Stored Procedures---转载
- 关于pv的那些事!!
- 在React+Babel+Webpack环境中使用ESLint
- DIV+CSS清除浮动方法
- github和本地仓库关联
- eclipse远程调试Tomcat方法(测试成功并且说说遇到的坑)
- fcn训练及预测tgs数据集
- Apache虚拟主机
- mui---获取入口文件对象
- 在VMware安装Centos7
- (转)shlex — 解析 Shell 风格语法
- Proud Merchants(01背包变形)hdu3466
- input type=file 选择图片并且实现预览效果的实例
- 键盘 Input子系统