美文网首页
js变量提升

js变量提升

作者: 焦迈奇 | 来源:发表于2018-07-25 09:00 被阅读0次

    JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。

    变量提升

    JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部

    'use strict';
    
    function foo() {
        var x = 'Hello, ' + y;
        console.log(x);
        var y = 'Bob';
    }
    
    foo();
    
    

    虽然是strict模式,但语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了。但是console.log显示Hello, undefined,说明变量y的值为undefined。这正是因为JavaScript引擎自动提升了变量y的声明,但不会提升变量y的赋值

    javascript变量提升,不提升赋值。

    对于上述foo()函数,JavaScript引擎看到的代码相当于:

    function foo() {
        var y; // 提升变量y的申明,此时y为undefined
        var x = 'Hello, ' + y;
        console.log(x);
        y = 'Bob';
    }
    

    javascript只有一个全局作用域,所有定义的变量都会绑定在window对象上,并且通过window调用对应的变量即属性是相同的概念。

    相关文章

      网友评论

          本文标题:js变量提升

          本文链接:https://www.haomeiwen.com/subject/sviumftx.html