1、函数嵌套
创建一个函数具有以下功能:sum(a)(b) = a +b,并且可以接受任意括号对,如
sum(2)(3) = 5
sum(4)(5)(6) = 15
sum(5)(6)(7)(8)=26
sum(1)(2)(3)(4)(5)(6)=21
.....
function sum(a) {
var sum = a;
function f(b) {
sum += b;
return f;
}
f.toString = function() { return sum; }
return f
}
2、[[scope]] for new Function
通常情况下,function的[[scope]]指向当前的
LexicalEnvironment,但对于new Function的function例外,其scope指向window
可以看两个例子:
window.a = 1;
function getFunc() {
var a = 2;
var func = function() { alert(a) }
return func;
}
getFunc()() // 2, from LexicalEnvironemnt of getFunc
window.a = 1
function getFunc() {
var a = 2
var func = new Function('', 'alert(a)')
return func
}
getFunc()() // 1, from window
这样就明白了