【发布时间】:2014-03-25 13:30:07
【问题描述】:
假设我有一个内联脚本标签,其代码非常简单,如下所示
(function() {
var test = "This is a simple test";
function modifyTest(s) {
s = "Modified test text";
};
modifyTest(test);
console.log(test) //Will still display "This is a simple test"
})();
但是,如果我使用 test = modifyTest(test);
更改已应用我的问题是这样的。
这是在函数内部修改 javascript 变量的唯一方法吗,这意味着我必须始终这样做
source = function(source); 为了改变函数内部的变量,
还是我错过了阻止我完成此任务的范围概念?
【问题讨论】:
-
JavaScript 使用按值传递,而不是按引用传递。赋值给一个变量从不会改变另一个变量的值。如果要更改特定变量的值,则必须显式分配给该变量。
-
@Felix Kling:“使用按值传递,而不是按引用传递”——这并不完全正确。它通过值传递引用(对于引用类型)
-
@zerkms:我很确定。如果您考虑到对象,则值是对对象的引用。 pass-by-reference 是一个定义非常明确的术语。
-
@zerkms:否。通过引用传递或分配意味着变量获得对另一个变量的引用,而不是对其值的引用。 JavaScript 总是按值传递,对于对象,该值是对对象的引用,而不是对变量的引用。您所指的是在维基百科文章中称为共享调用:en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing,但本质上它是按值传递。
-
呃,都在同一点上-“它通过值传递引用”| “本质上是按值传递”
标签: javascript function