jas*_*son 7 javascript function
在Stoyan Stefanov的"JavaScript Patterns"一书中,有一个关于自定义函数的部分.
var scareMe = function(){
console.log("Boo!");
scareMe = function(){
console.log("Double Boo!");
}
}
scareMe();//==>Boo!
scareMe();//==>Double Boo!
Run Code Online (Sandbox Code Playgroud)
它按我的预期工作.但我修改了scareMe函数如下:
function scareMe(){
console.log("Boo!");
function scareMe(){
console.log("Double Boo!");
}
}
scareMe();//==>Boo!
scareMe();//==>Boo!
Run Code Online (Sandbox Code Playgroud)
问题:
PSL*_*PSL 11
scareMe调用时的第一个函数通过scareMe在其中创建另一个函数来覆盖自己的行为,这会覆盖上部作用域中的一个函数,所以原始scareMe更改的定义,我已经看到如果你想在第一次设置中使用这种方法一个应用程序,并希望在设置后立即改变其行为.
如果您已定义:
var scareMe = function(){
console.log("Boo!");
var scareMe = function(){ //define it with var
console.log("Double boo!");
}
}
scareMe();//==>Boo!
scareMe();//==>Boo! //you will see the behavior as that of the second one.
Run Code Online (Sandbox Code Playgroud)
也是一次性设置的一个实际实现:
var scareMe = function(){
console.log("Boo!");
//I have done my job now. I am no longer needed.
scareMe = undefined;
}
scareMe();//==>Boo!
scareMe();//==> oops error
Run Code Online (Sandbox Code Playgroud)
第二种情况,您正在创建一个名称scareMe范围仅在函数内的名称的新函数,它不会覆盖自身.
试试这个例如:
function scareMe(){
console.log("Boo!");
function scareMe(){
console.log("Double bool!");
}
scareMe(); //Now this invokes the once defined inside the scope of this function itself.
}
scareMe();//==>Boo! and Double bool!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3166 次 |
| 最近记录: |