zoukankan      html  css  js  c++  java
  • Javascript的一些困惑

    定义一个全局变量,一个函数调用此变量,如下:

    var s = 123;
    function tst(){
    alert(s);
    s = 456;
    alert(s);
    }
    alert(s);

    执行后为:

    123

    123

    456

    如果写成如下格式:

    var s = 123;
    function tst1(){
    alert(s);
    var s = 456;
    alert(s);
    }
    alert(s);

    执行后为:

    123

    undefined

    456

    为什么下面这个会是这样的结果呢?

    按照abruzzi的《Javascript Core v0》上所说为:

    Javascript的函数是在局部作用域内运行的函数体可以访问其外层的(可能是全局作用域)变量和函数。javascript的作用域为词法作用域所谓词法作用域,其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定。

    具体到这个例子,那就是:因为在函数tst1的定义中,预先访问了未声明的变量s,然后才对s变量进行初始化,所以第一个alert(s)会返回undefined,那为什么函数这个时候不访问外部的s变量呢?这是因为,在词法分析结束后,构造作用域链的时候,会将函数内定义的var变量放入该链,因此s在整个tst1内都是可见的(从函数体的第一行到最后一行),由于s变量本身是未定义的,程序顺序执行,到第一行就返回undefined,第二行为s赋值,所以第三行返回456。

    仔细思考,解惑啊。

  • 相关阅读:
    FirstApp,iphone开发学习总结
    FirstApp,iphone开发学习总结7,相机
    FirstApp,iphone开发学习总结6,Navigation的使用
    FirstApp,iphone开发学习总结1,UIview添加UIimage
    oracle 12cR2 RAC deconfig CRS过程记录
    Activex word
    图片灰度化。
    vb word
    加密
    页面内打开word 组件。
  • 原文地址:https://www.cnblogs.com/Mygirl/p/2087797.html
Copyright © 2011-2022 走看看