关于javascript:修改函数内的变量

Modify a variable inside a function

本问题已经有最佳答案,请猛点这里访问。

假设我有一个内联脚本标记,它有一个非常简单的代码,如下所示

1
2
3
4
5
6
7
8
9
10
11
(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);为了改变函数中的变量,

或者我是否错过了一个阻止我完成这项工作的范围概念?


modifyTest函数本质上是创建一个称为s的局部函数级变量;该变量只存在于函数的作用域内,因此修改它不会影响外部作用域。

如果要修改外部作用域,则不使用参数:

1
2
3
4
5
6
7
var test ="This is a simple test";
function modifyTest(){
    test ="modified test text";
}
console.log(test);   // This is a simple test
modifyTest();
console.log(test);   // Modified test text

不能修改通过引用传递的对象,因此可以修改某个对象的属性:

1
2
3
4
5
6
var o = { test: 'This is a simple test' };
function modifyTest(x){
    x.test = 'modified test text';
}
modifyTest(o);
console.log(o.test);   // modified test text

您甚至可以以您希望修改的属性的名称传递:

1
2
3
4
5
6
var o = { test: 'This is a simple test' };
function modifyTest(x, name){
    x[name] = 'modified test text';
}
modifyTest(o, 'test');
console.log(o.test);    // modified test text


您所说的是"通过引用"调用函数。JavaScript(与大多数其他函数语言一样)不支持这种情况,因为更改当前范围之外的变量是一种副作用,而这些副作用与函数编程范式相矛盾。

但是,您始终可以更改当前范围内的变量。因此,在另一个函数中定义的任何函数都可以更改外部函数的任何局部变量。