首先看下面的代码: var x = 1 var f1 = function( f ) { var x = 2 ; f( ' console.log( x ) ' ) } var f2 = function( ) { var x = 2 ; eval( ' console.log( x ) ' ) } f1( eval ) // 1 f2( ) // 2 eval 是一个 global 对象的内置函数,即便在 window 对象内,它也可以作为全局函数使用. 如果你对结果有疑问,那为了搞懂原因…
一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(function foo(){ console.log(bar); }); console.log(foo); 先说下结果为99和foo is not defined.在<你不知道的JavaScript>一书中有这么一句话:无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的…