Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
475 views
in Technique[技术] by (71.8m points)

JS 预解析问题

    var z = 10; //预解析声明  var
    function foo(){ // 通过预解析机制 并定义 
            console.log(z);
    }

    (function(funArg){  //自执行函数:定义和执行一起完成
            console.log(funArg)
            var z = 20;
            funArg();
    })(foo);
    
    一直不了解为什么会输出是  10  。
    请各位大神解答一下。

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
  1. 函数的参数是 按值传递 的,但是,传递引用类型的参数,即使是按值传参,名参(funArg)也会按引用来访问同一个对象(foo函数对象)。
  2. JavaScript采取的是 静态作用域(词法作用域),即在书写代码或者说定义时确定的作用域。

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...