在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); // 30
  6:  alert(sum); //3 0

相关