zoukankan      html  css  js  c++  java
  • javascript中的作用域和作用域链

    一直觉得js中的作用域链是个比较神秘的东西,搞的也不是很清楚,以致昨天面试的时候,面试官一问作用域,我就想到作用域链上去了,结果也没答好,其实二者是不同的概念。

    作用域简单来说就是一个变量的作用范围,下次再问到js作用域的问题,可以这么回答:

    1、定义在函数外部的变量都是全局变量,定义在函数内部的变量如果加上var就是局部变量,不加var就是全局变量;函数内部的局部变量如果跟全局变量重名,会覆盖掉全局变量。

    2、js中没有块作用域(这个尤其注意,跟java、php等不一样),也就是说如果一个函数中有if、for语句块,里面的变量在整个函数中可见,而不是只在语句块中可见(昨天就问我了for语句中变量的生存周期)。

    3、全局变量都是window对象的属性(可以通过window对象来调用),如:var x=3;alert(window.x);

    4、作用域链:

    <script>

    var globel="globel";

    function outer(){

        var outer="outer";

        function inner(){

           var inner="inner";

           alert(globel);

       }    

       inner();

    }

    outer();

    </script>

    简单来说,上述代码在执行过程中,会首先创建一个window活动对象,处于作用域链的最下面,执行到outer()时会创建一个outer活动对象,处于window对象的上面,执行到inner()时会创建一个inner活动对象,处于outer对象上面。当要alert(globel)的时候,首先会在inner对象中找有没有这个变量,再到outer对象中找,再到window对象中找,如果都没找到,就会报错"globel is not defined"。当我们在函数内部访问变量时,其实就是在作用域链上寻找变量的过程。

  • 相关阅读:
    Visual Studio IDE 背景色该为保护眼睛色
    搭建windows server 2008 r2 FTP 后 开启防火墙无法访问的解决办法
    Div+CSS展示物流跟踪轨迹信息
    如何删除打印队列中的任务
    用SoapUI进行Webservice的性能压力测试
    C# httpwebrequest post 传输百分号‘%’
    在线转换工具
    JSON数据转换到POCO的代码
    后端接口的幂等性(转)
    全局流水ID号生成的几种方法
  • 原文地址:https://www.cnblogs.com/zye3511237/p/3399919.html
Copyright © 2011-2022 走看看