美文网首页让前端飞
函数作用域&预处理机制

函数作用域&预处理机制

作者: 溪离欣洛 | 来源:发表于2014-08-13 12:50 被阅读61次

浏览器解读代码时,会按照以下顺序进行加载,先是对var 声明的变量进行预处理,只声明不复制,之后对于函数声明进行提升,并把函数的内容打印到函数名的后面,最后对于参数进行处理。
之后浏览器按照代码加载顺序,逐行解析代码,遇到表达式再开始赋值,同时修改仓库里面的值。

    function a(b){
        alert(b);
        function b(){
            alert(b);       //此处弹出function b
        };
        b();            //此处弹出 function b
    }
    a(1);

    var n=0;
    function a(){
        var n=10;
        function b(){
            n++;
            alert(n);
        }
        b();
        return b;
    }
    var c=a();     //此处执行了一遍a函数 -->11
    c();            // -->12
    alert(n)       // -->0
    alert(a);
    var a=1;
    alert(a);
    function a(){
        alert (2);
    }
    alert(a);
    function a(){
        alert(4)
    }
    alert(a);

不同script添加的js文件,可以建立向前方的依赖关系,但是之前的不能取到后方的内容。由此可以总结出,对于此种情况下的js作用域,是自上而下的,类似于函数中由内及外的作用域关系。

    var a=1;
    function fn1(){
        alert (a);
        var a=2;
    }
    fn1();              //函数内声明的a在作用域上优于父级函数的声明,但是由于只声明 未赋值,因此弹出undefine;
    alert(a);           //1
var a=1;
function fn1(a){
    alert(a);
    a=2;
}
fn1();          // undefine 此时a应该为传递进的参数
alert(a);           //1

不论函数还是变量,都是有作用域的,而预解析只能是在同一作用域下提前解析。
作用域是看的函数声明或者变量所定义的位置,而不是调用它们的位置。

    function fn1(){
        var a='eva';
        fn2();
    }
    function fn2(){
        alert(a);
    }
    fn1();               // 报错 由于fn2所在的作用域中没有声明a
    function fn1(){
        var a='eva';
        fn2(a);         
    }
    function fn2(a){
        alert(a)
    }
    fn1();          //弹出eva

相关文章

  • 函数作用域&预处理机制

    浏览器解读代码时,会按照以下顺序进行加载,先是对var 声明的变量进行预处理,只声明不复制,之后对于函数声明进行提...

  • JavaScript作用域探幽(二)

    函数作用域和块作用域 Javascript有基于函数的作用域,而在ES6的版本以前,除了少数机制能创建块作用域之外...

  • 函数作用域&&作用域链

    注意:函数作用域和变量作用域并不是一个概念,在学习函数作用域时可以先暂时忘记变量作用域的概念。 怎么理解函数作用域...

  • 函数作用域确定于函数定义期间

    1. 函数作用域确定于函数定义期间 2. 构造实例后修改原型,已经创建的实例不受影响 3.函数形式 作用域链机制

  • JavaScript 作用域和闭包理解

    作用域: 分为函数作用域,和块级作用域; 函数作用域 函数作用域外面的无法访问函数作用域内部的变量和函数,这样就可...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • 详解Kotlin中的作用域函数

    Kotlin作用域函数 作用域函数,Kotlin在语法层面支持拓展函数,作用域函数,作用域函数是指对数据做一些变换...

  • 1. let , const 块级作用域

    作用域全局作用域 => global函数作用域 => 因函数执行而产生的作用域 块级作用域形式 : { }特点 :...

  • js 变量作用域问题 以及 let

    JavaScript中有以下两种作用域 全局作用域函数作用域全局作用域是函数之外(最外层代码)的作用域。在函数之外...

  • 第九天,函数作用域和声明提前

    函数作用域和函数声明提前。 函数作用域,分为全局作用域和部分作用域,在系统执行函数时会自动创建一个作用域,在执行完...

网友评论

    本文标题:函数作用域&预处理机制

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