在ES中有关变量和作用域的几个小坑
1.ES中的所有函数都是按值传递参数的,而不是对象。
1: function setName(obj) {
2: obj.name = "Nick";3: obj = new Object();
4: obj.name = "Grep";5: }6: var person = new Object();7: setName(person);8: alert(person.name); //“Nick”
看上面的例子,obj在输入值后就被传入了,而重新写的obj就被传入了新的局部对象,函数执行后就被销毁了。
2.没有块级的作用域
在ES中花括号封闭的代码是没有自己的作用域,而变量的作用域会添加到当前的执行环境。
1: for (var i=0;i<10;i++) {2: dosomething(i);3: }4:5: alert(i); // 10
3.变量的声明
使用var声明的变量会被自动添加到最接近的环境中。但如果没使用,变量就会被自动添加到全局变量中。严格模式下,所有没声明的变量都会报错。
1: function add(num1, num2) {
2: sum = num1 + num2;3: return sum;
4: }5: var result = add(10, 20); // 306: alert(sum); //3 0