console.log(s);// undefined // 函数的声明提升但是并未赋值函数体console.log(ss);// Uncaught ReferenceError: ss is not defined // 打印未定义的ss是为了对比说明函数的声明提升s();// Uncaught TypeError: s is not a functionif(1){functions(){ console.log(1);}}
var s =newFunction("a","b","console.log(a,b);");s(1,2);// 1,2console.log(s.__proto__ ===Function.prototype);//truefunctionss(){}// 声明的函数都是Function的一个实例console.log(ss.constructor === Function);// trueconsole.log(ss.__proto__ ===Function.prototype);// true
new Function与eval也有所不同,其对解析内容的运行环境的判定有所不同。
// eval中的代码执行时的作用域为当前作用域,它可以访问到函数中的局部变量,并沿着作用域链向上查找。// new Function中的代码执行时的作用域为全局作用域,无法访问函数内的局部变量。var a ='Global Scope';(functionb(){var a ='Local Scope';eval("console.log(a)");//Local Scope(newFunction("console.log(a)"))()//Global Scope})();