标签:javascript 变量函数提升
1.JavaScript hoisting(变量/函数 提升)
以下实验都是通过firefox的Console做的实验.
之前变量没有定义的错误没了,取而代之的是告诉我们a的值是 ‘undefined‘.
先不管a的值缘何为 ‘undefined‘ 了,至少可以知道现a这个变量是定义了,因为之前报的‘ a is not defined‘的错误没有了。
JavaScript中可以提前使用在后面语句中声明的变量,这种特性叫被国外某网友(ben cherry)称为Hoisting (非官方术语) 。
我在<<javascript 模式>> 一书中看到该词被翻译为 "提升" ,指的的就是变量声明提前 .可以理解为将变量的声明提前了,所以在变量声明前使用变量不会报错。而且这一特性不仅限于变量名,对于函数的声明也是同样的效果。
这里需要深入理解Hoisting这一特性。它的提前只是将声明提前,而对变量的赋值并没有跟着提前。
也就是为什么我们可以在第一句使用变量a但它的值却是 ‘undefined‘。 JavaScript里面声明了但还未赋值的变量其值默认便是 ‘undefined‘。
var a ;
console.log(a);
a = 1;
2. 参数变更影响到函数外部
function myFunc(theObject) { theObject.make = "Toyota"; } var mycar = {make: "Honda", model: "Accord", year: 1998}, x, y; x = mycar.make; // x gets the value "Honda" myFunc(mycar); y = mycar.make; // y gets the value "Toyota" // (the make property was changed by the function) console.log(x ); console.log(y);
可以看出,上面代码中已经把mycar 对象的make属性修改了.
当在函数体内对传入的数组或对象赋值时,这个更改不会反映到函数体外的原变量身上
下面是关于对象的例子:function myFunc1(theObject) { theObject = {make: "Ford", model: "Focus", year: 2006}; } var mycar = {make: "Honda", model: "Accord", year: 1998}, x, y; x = mycar.make; // x gets the value "Honda" myFunc1(mycar); y = mycar.make; // y still gets the value "Honda" console.log(x); console.log(y);
这一步与原来代码的操作差别仅在于在函数体内是对参数赋新值呢还是对参数的属性或数组的元素进行更改。
以上内容来自MDN 中关于javascript的文章.链接地址为:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions
Best wishes.
javascript 变量/函数 提升,布布扣,bubuko.com
标签:javascript 变量函数提升
原文地址:http://blog.csdn.net/lcstrive/article/details/31384113