预解析和作用域问题

  // 考题二,考变量提升和没有块级作用域:

    console.log(a);

    if ('a' in window) {

        var a = 10;

    }

    console.log(a);



    // 考题三,考函数作用域:

    if ('a' in window) {

        (function(){

            var a = 10;

        }());

    }

    console.log(a);


慕斯709654
浏览 564回答 1
1回答

互换的青春

1、先说考题2,在javascript中是没有块级作用于的,也就是说,题中的代码等同于一下代码:    console.log(a);    var a;    if ('a' in window) {         a = 10;     }    console.log(a);另外,使用var声明的变量和使用function声明的函数在执行之前会被前置,所以题中代码等同于一下代码:    var a;    console.log(a);    if ('a' in window) {         a = 10;     }    console.log(a);而var a;声明变量可以认为相当于在window上注册了a变量:window.a。所以就这样了2、考题3是吧var a = 10 ;放到了一个闭包里面:         (function(){             var a = 10;         }());这是一个函数,javascript中是有函数作用域的,所以a的声明是无法提出来到外面的,在外面也无法引用到a,所以执行结果会报错。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript