Skip to content


JS学习笔记提升规则(hoisting)

JS 学习笔记一:

提升规则 hoisting

JS代码:

var  h_var = "Hello hoisting";

alert(h_var);

运行代码会输出 Hello hoisting

代码2:

var  h_var = "Hello hoisting";

(function(){

alert(h_var);

})();

运行代码也会输出 Hello hoisting

代码3:

var  h_var = "Hello hoisting";

(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代码。。。



}

则相当于:

function hoisting(){

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!" 应该把变量声明放到行数最顶部!

})();


Posted in 前端开发.

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.