是否可以从自己的体内重新定义JavaScript函数.例如,我可以执行以下操作吗?
function never_called_again(args) {
// Do some stuff
never_called_again = function (new_args) {
// Do some new stuff
}
}
Run Code Online (Sandbox Code Playgroud)
以上是否有效且是否具有正确的语义?我不想用旧的函数名创建一个新的全局变量,因为我试图在全局范围内做这种事情,但是从各种对象范围开始,我不希望当我发生名字冲突时在这些本地范围内重新定义函数.
gbl*_*zex 42
确实可以从其身体重新定义一个功能.该技术用于所谓的惰性函数定义模式.
它看起来像这样:
// Lazy Function Definition Pattern
var foo = function() {
var t = new Date();
foo = function() {
return t;
};
return foo();
}
Run Code Online (Sandbox Code Playgroud)
此函数存储第一个调用的日期,然后返回此日期.
如果将其与模块模式进行比较,不同之处在于初始化仅在首次调用时发生,而不是在定义时发生.对于昂贵的初始化,它可以是一个巨大的好处.
// Conditional Module Pattern
var foo = (function() {
var t;
return function() {
if (t) {
return t;
}
t = new Date();
return t;
}
})();
Run Code Online (Sandbox Code Playgroud)
Bro*_*ams 15
是的,您可以通过这种方式重新定义功能.
运行这个:
function never_called_again(args) {
console.log('Func 1', args);
never_called_again = function (new_args, x) {
console.log('Func 2', new_args, x);
}
}
never_called_again('arg A', 'arg B');
never_called_again('arg A', 'arg B');
Run Code Online (Sandbox Code Playgroud)
收益率:
Func 1 arg A
Func 2 arg A arg B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22213 次 |
| 最近记录: |