javascript - 预解析和作用域问题

查看:133
本文介绍了javascript - 预解析和作用域问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

  // 考题二,考变量提升和没有块级作用域:
    console.log(a);
    if ('a' in window) {
        var a = 10;
    }
    console.log(a);


    // 考题三,考函数作用域:
    if ('a' in window) {
        (function(){
            var a = 10;
        }());
    }
    console.log(a);

搞不懂'a' in window为什么是true;

解决方案

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,所以执行结果会报错。

这篇关于javascript - 预解析和作用域问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆