JS中的变量提升

JS中的变量提升
先来看一个面试题目

var v='Hello World';
(function(){
    alert(v);
    var v='I love you';
})() 

面试官问你这个结果是多少?你怎么回答?

实际结果是----undefined

原因是什么呢?这其实就是JS中的变量提升,就是把定义在后面的东东(变量或函数)提升到前面中定义。

比如,我们定义三个变量

(function(){
    var a='One';
    var b='Two';
    var c='Three';
})() 

实际上,JS内部运作时,由于变量提升,他是这样的

(function(){
    var a,b,c;
    a='One';
    b='Two';
    c='Three';
})()

最上面那个面试题为啥会报undefined呢?

var v='Hello World';
(function(){
    var v;
    alert(v);
    v='I love you';
})() 

所以,在写js code 的时候,我么需要把变量放在块级作用域的顶端

var v='Hello World';
(function(){
    var v = 'I love you';
    alert(v);
})() 

函数提升 :函数提升是把整个函数都提到前面去。在我们写js code 的时候,我们有2中写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。

成功:

function myTest(){
    foo();
    function foo(){
        alert("我来自 foo");
    }
}
myTest(); 

失败:

function myTest(){
    foo();
    var foo =function foo(){
        alert("我来自 foo");
    }
}
myTest();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容