Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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 &引用;x=x | | 4“;生成`ReferenceError:x未定义`error_Javascript - Fatal编程技术网

Javascript &引用;x=x | | 4“;生成`ReferenceError:x未定义`error

Javascript &引用;x=x | | 4“;生成`ReferenceError:x未定义`error,javascript,Javascript,为什么x=x | | 4甚至x=(x | | 5)生成ReferenceError:x未定义error,但var x=x | | 4按预期工作?您正在尝试使用一个以前未声明的变量。这会导致引用错误 [编辑] 这么多错字 [exit]@grc做对了。x=x | | 4表示在变量x中赋值x或4。 如果x为空,则将4分配给变量x 可能是您没有声明x变量。这就是为什么没有定义x 如果您尝试以下操作,它将起作用: var x; x=x||4; alert(x); 这也将有助于: x=x||4; var

为什么
x=x | | 4
甚至
x=(x | | 5)
生成
ReferenceError:x未定义
error,但
var x=x | | 4
按预期工作?

您正在尝试使用一个以前未声明的变量。这会导致引用错误

[编辑] 这么多错字


[exit]@grc做对了。

x=x | | 4
表示在变量x中赋值x或4。 如果x为空,则将4分配给变量
x

可能是您没有声明
x
变量。这就是为什么没有定义
x

如果您尝试以下操作,它将起作用:

var x;
x=x||4;
alert(x);
这也将有助于:

x=x||4;
var x;
alert(x);

这是因为变量声明首先被处理(提升)。这本书很好地解释了这一点:

因为变量声明(以及一般的声明)是 在执行任何代码之前处理,在任何地方声明变量 在代码中,这相当于在顶部声明它。这也意味着 一个变量在声明之前可以被使用。这 行为称为“提升”,因为变量 声明移动到函数或全局代码的顶部

因此,以下措施也将起作用:

x=x | | 4;
var x;

x=x
是赋值操作,而不是比较so,为什么
x=(x | | 5)
会产生错误?另外,我不想使用
var
,应该全局声明变量。因为解析器不知道变量
x
,试图访问它的值会抛出
ReferenceError
。如果您确实想使用全局变量,请使用
window.x=window.x | | 4
语法。请注意
x=window.x | | 4
在非严格模式下可以正常工作,但在严格模式下会抛出错误。是的@raina77ow是正确的。但是如果可能的话,应该避免使用这样的全局变量。
x=5
不会产生错误,那么为什么
x=x | | 3
会产生错误,而在这两个语句中
x
都没有事先声明。事实上,对我来说,
x=x | | 3
x=window.x | | 3
似乎是等价的。