javascript - 我可以从另一个函数中重新定义一个 JavaScript 函数吗?

标签 javascript function scope

我想将函数引用“go”传递给另一个函数“redefineFunction”,并在“redefineFunction”内部重新定义“go”。根据 Johnathan Snook 的说法,函数是 passed by reference ,所以我不明白为什么当我将它传递给 redefineFunction() 时 go() 没有被重新定义。有什么我想念的吗?

// redefineFunction() will take a function reference and
// reassign it to a new function
function redefineFunction(fn) {
    fn = function(x) { return x * 3; };
}

// initial version of go()
function go(x) {
    return x;            
}

go(5); // returns 5

// redefine go()
go = function(x) {
     return x * 2;        
}

go(5); // returns 10

// redefine go() using redefineFunction()
redefineFunction(go);

go(5); // still returns 10, I want it to return 15

或者看我的 fiddle http://jsfiddle.net/q9Kft/

最佳答案

Nerd 会告诉你 JavaScript 是纯值传递,但我认为 only clouds the issue因为传递的(传递对象时)是对该对象的引用。因此,当您修改一个对象的属性时,您是在修改原始对象,但如果您完全替换该变量,您实际上是在放弃对原始对象的引用。

如果你试图在全局范围内重新定义一个函数:(这是一件坏事;你通常不应该有全局函数)

function redefineFunction(fn) {
    window[fn] = function() { ... };
}

redefineFunction('go');

否则,您将不得不返回新函数并在调用方分配。

function makeNewFunction() {
    return function() { ... };
}

go = makeNewFunction();

关于javascript - 我可以从另一个函数中重新定义一个 JavaScript 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535463/

相关文章:

javascript - 如何在ckeditor中粘贴Excel表格?

c - 在程序中使用几个小函数会影响性能吗?

python - 为什么我的递归函数返回 None?

java - "provides"方法或注入(inject)类上的 Dagger 2 范围注释

c - 使用函数改变 char* 数组,但字符串值在函数退出后发生变化。

javascript - 在 Node.js 中的循环内调用回调函数的范围问题

javascript - Canvas 仅显示在 slider 的第一个图像上或连接到每个图像的底部

javascript - Jquery 还是 HTML 问题?为什么我的选择器不起作用?

javascript - 如何在 Crockford 的新构造函数模式中共享 "constructor"功能?

javascript - 访问另一个函数中的变量,返回未定义 - JavaScript