JS 学习笔记一:
提升规则 hoisting
JS代码:
var h_var = "Hello hoisting";
alert(h_var);
alert(h_var);
运行代码会输出 Hello hoisting
代码2:
var h_var = "Hello hoisting";
(function(){
alert(h_var);
})();
(function(){
alert(h_var);
})();
运行代码也会输出 Hello hoisting
代码3:
var h_var = "Hello hoisting";
(function(){
alert(h_var);
var h_var = "Hello hoisting again!"
})();
(function(){
alert(h_var);
var h_var = "Hello hoisting again!"
})();
运行代码则会输出 undefined, 为什么我们已经声明了变量h_var 但是会输出undefined呢?
在它的当前作用域内,不管变量是在哪里声明的,都会提升到顶部作用域,然而,只是声明部分提升,赋值部分不会被提升,如果变量被赋值,则当前的值会初始化为 undefined!
声明跟初始化的区别:
假设有这样一个变量声明:
var h_var = "hello h"
那么,首先是声明: var h_var ,然后才是初始化变量 h_var = “hello h”.
再来一个例子:
function hoisting(){
var a=1;
//其他js代码
var b=2;
//其他js代码。。。
}
var a=1;
//其他js代码
var b=2;
//其他js代码。。。
}
则相当于:
function hoisting(){
var a,b;
a = 1
//其他js代码,再这里的js代码如果用到b变量的话则是输出undefined!
b=2;
//其他js代码。。。
}
var a,b;
a = 1
//其他js代码,再这里的js代码如果用到b变量的话则是输出undefined!
b=2;
//其他js代码。。。
}
提示: 把所有的变量声明都写到函数的顶部!
所以不难理解上面的代码3 :
var h_var = "Hello hoisting";
(function(){
var h_var; //变量声明自动提升到函数顶部,但是变量初始化没有提升到函数顶部,所以初始值为 undefined
alert(h_var);// 输出 undefined
h_var = "Hello hoisting again!" //var h_var = "Hello hoisting again!" 应该把变量声明放到行数最顶部!
})();
(function(){
var h_var; //变量声明自动提升到函数顶部,但是变量初始化没有提升到函数顶部,所以初始值为 undefined
alert(h_var);// 输出 undefined
h_var = "Hello hoisting again!" //var h_var = "Hello hoisting again!" 应该把变量声明放到行数最顶部!
})();

0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.
You must be logged in to post a comment.