Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript如果只在函数外部工作_Javascript_Html_Scripting - Fatal编程技术网

Javascript如果只在函数外部工作

Javascript如果只在函数外部工作,javascript,html,scripting,Javascript,Html,Scripting,我无法让javascript函数正常工作 if (!cHp) { cHp = 200 }; 很有魅力,但是 function checkNull(x, y) { if (!x) { x = y; } } 根本不起作用 我做错了什么?它确实有效,但对您没有任何好处,因为JavaScript纯粹是按值调用的。这意味着在函数中,参数“x”和“y”包含调用环境中存在的值的副本 因此, 使变量“b”的值和数字19的副本传递给函数。函数可以做它想做的任何事情,比如“x”和“y”,但这对调用上下文中的变量

我无法让javascript函数正常工作

if (!cHp) { cHp = 200 };
很有魅力,但是

function checkNull(x, y) {
if (!x) { x = y; }
}
根本不起作用


我做错了什么?

它确实有效,但对您没有任何好处,因为JavaScript纯粹是按值调用的。这意味着在函数中,参数“x”和“y”包含调用环境中存在的值的副本

因此,

使变量“b”的值和数字19的副本传递给函数。函数可以做它想做的任何事情,比如“x”和“y”,但这对调用上下文中的变量“b”没有影响

编辑-确定要扩展此主题并切断过长的注释线程,让我们讨论一下“按值调用”(相比之下,“按引用调用”)的含义。在按值调用参数传递方案中,调用环境中的实际参数值被复制到被调用函数的参数变量中。在按引用调用方案中,对调用环境中某种变量的引用被传递给被调用函数。这两个有什么不同

在按值调用方案中,会发生以下情况:

var a = 1;
function change(b) {
  b = 2;
}

change(a);
alert(a); // still 1
然而,在参考呼叫方案中,这是正确的:

// FANTASY CODE - NOT REAL JAVASCRIPT
var a = 1;
function change(b) {
  b = 2;
}

change(a);
alert(a); // it is 2 in this fantasy call-by-reference code
请注意,引用调用方案的一个含义是调用环境中的实际参数必须是变量或对象属性或其他内容;也就是说,它必须是编程语言术语中所谓的“l值”。另一种说法是,它必须是可以出现在赋值表达式左侧的内容

由于JavaScript中的变量将对象作为其“值”的方式,事情变得有点混乱。将对象指定给变量时:

var myObj = {};
您实际上是在为对象指定引用。这在JavaScript中是完全透明的,您不需要考虑它。处理对象值和JavaScript中的基本值一样简单。然而,这意味着当对象值传递给函数时,变量的实际值是对对象的引用这一事实意味着JavaScript的逐值调用语义似乎类似于逐引用调用方案:

var a = { property: 1 };
function change(b) {
  b.property = 2;
}

change(a);
alert(a.property); // it's 2!! OMG call-by-reference! (not)
是的,函数可以修改作为参数传递的对象的属性值。那个电话是打给我的吗,不是,至少如果你关心“通过引用调用”一词的含义,就不是。即使该函数可以更改“property”属性的值,但它仍然不能更改“a”本身的值!这就是所谓的引用


还有其他一些参数传递方案,目前很少见到。其中一个很吸引人的是Algol60中的“点名”。该方案所做的是将实际参数视为隐式函数,这样在调用的函数中,对参数的引用将重新计算参数表达式。还有“按值/结果调用”,这意味着实际参数按值传递,但当函数返回时,函数中参数的当前值将隐式复制回调用环境中的源变量。(该方案还要求实际参数为l值,就像通过引用调用一样。)

它确实有效,但对您没有任何好处,因为JavaScript纯粹是通过值调用的。这意味着在函数中,参数“x”和“y”包含调用环境中存在的值的副本

因此,

使变量“b”的值和数字19的副本传递给函数。函数可以做它想做的任何事情,比如“x”和“y”,但这对调用上下文中的变量“b”没有影响

编辑-确定要扩展此主题并切断过长的注释线程,让我们讨论一下“按值调用”(相比之下,“按引用调用”)的含义。在按值调用参数传递方案中,调用环境中的实际参数值被复制到被调用函数的参数变量中。在按引用调用方案中,对调用环境中某种变量的引用被传递给被调用函数。这两个有什么不同

在按值调用方案中,会发生以下情况:

var a = 1;
function change(b) {
  b = 2;
}

change(a);
alert(a); // still 1
然而,在参考呼叫方案中,这是正确的:

// FANTASY CODE - NOT REAL JAVASCRIPT
var a = 1;
function change(b) {
  b = 2;
}

change(a);
alert(a); // it is 2 in this fantasy call-by-reference code
请注意,引用调用方案的一个含义是调用环境中的实际参数必须是变量或对象属性或其他内容;也就是说,它必须是编程语言术语中所谓的“l值”。另一种说法是,它必须是可以出现在赋值表达式左侧的内容

由于JavaScript中的变量将对象作为其“值”的方式,事情变得有点混乱。将对象指定给变量时:

var myObj = {};
您实际上是在为对象指定引用。这在JavaScript中是完全透明的,您不需要考虑它。处理对象值和JavaScript中的基本值一样简单。然而,这意味着当对象值传递给函数时,变量的实际值是对对象的引用这一事实意味着JavaScript的逐值调用语义似乎类似于逐引用调用方案:

var a = { property: 1 };
function change(b) {
  b.property = 2;
}

change(a);
alert(a.property); // it's 2!! OMG call-by-reference! (not)
是的,函数可以修改作为参数传递的对象的属性值。那个电话是打给我的吗,不是,至少如果你关心“通过引用调用”一词的含义,就不是。即使该函数可以更改“property”属性的值,但它仍然不能更改“a”本身的值!这就是所谓的引用

还有其他一些参数传递方案,目前很少见到。其中一个很吸引人的是Algol60中的“点名”。该方案所做的是处理实际参数s