在浏览器控制台中,如果我键入var x=10
它显示undefined
,而如果我键入x=10
它显示10
。两者执行相同的任务,然后有什么不同? 我不问使用var和不使用var之间的区别?在浏览器控制台中输入时,var x = 10和x = 10之间有什么区别?
回答
您在浏览器控制台,让您身在全球范围内alerady ,并且有或没有var对变量的存储方式没有影响:
然而,=
是一个运营商其回报就是你分配的价值,所以a = 1
将计算为1,你可以看到一个2
当你键入b = 2
。 var
不返回任何东西,它是一个声明不是一个表达式。
也许有些参考文献:[*赋值运行时语义*](http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation ) - 分配表达式返回右手的值。 [*变量声明运行时语义*](http:// www。ecma-international.org/ecma-262/6.0/#sec-variable-statement-runtime-semantics-evaluation) - 如果成功,则返回* undefined *。 – RobG
var x = 10;设置当前作用域的值(以函数内部为例)。
x = 10;设置全局范围的值,所以无处不在。
我知道,但这并不重要。您也可以使用变量在控制台内输入函数。在这种情况下,浏览器控制台范围与全局范围相同,因此无关紧要。 –
中打印 – seahorsepip
你错过了这个问题的要点。 OP询问为什么控制台在一种情况下用“未定义”响应,而在另一种情况下用“10”响应。 – nnnnnn
如果在函数或其他非全局范围内使用var,那么该变量不是全局变量。如果在变量名称之前没有使用var,那么您已经创建了一个全局变量。
/
/ These are both globals
var foo = 1;
bar = 2;
function()
{
var foo = 1; // Local
bar = 2; // Global
// Execute an anonymous function
(function()
{
var wibble = 1; // Local
foo = 2; // Inherits from scope above (creating a closure)
moo = 3; // Global
}())
}
如果你不这样做的任务,那么你需要使用VAR:
var x; // Declare x
说明
情况下x = 10
:
这将创建一个变量在名为x
的全局范围内,值为10
。 此外,这是一个表达式,它返回值10
。这是有用的,以便能够做的事情一样var x = y = 10;
设置,使x
和y
的值10
情况下var x = 10
:
这会在当前范围,这恰好是 变量全球范围,名称为x
,值为10
。由于它是使用var
语法创建的,因此它不能作为表达式求值,因此它会返回undefined
,它将打印到控制台。
摘要
有书面var x = 10
VS x = 10
从控制台的效果没有区别,虽然会有在其他地方。后者在严格模式下也是不允许的。但是第一个返回undefined
,因为运行时没有输出,但第二个返回10
,因为x=10
是一个表达式。
例
你可以看到正在发生的事情更好一点,如果你使用eval
var output = eval('x = 10');
console.log(output) // 10
VS
var output = eval('var x = 10');
console.log(output) // undefined
// they both define var x and set it value to 10,but they are diff about below
// x is globally
x = 10
// x is scopely
var x = 10
在浏览器ENV,全球平均VAR是定义为对象window
的财产
但要小心使用的第一个代码,它可能会导致全局定义变量。
如果它在strict mode
,这是不行的,因为隐含定义全球没有允许。
OP理解这两个版本的作用,以及范围。问题是关于为什么当这些行被输入到控制台时*控制台给出了不同的响应。 – nnnnnn
方案1:
见基本上当你在浏览器控制台,您得到10,因为10正在上键入X = 10是由浏览器控制台返回一个int值。
场景2: 而当您在浏览器控制台上键入var x = 10时,您会看到“未定义”,因为它显示每个命令的返回值,并且在此场景中控制台不返回任何内容。
而且进一步详细参考访问这里:
- 1. JavaScript中的'var $ x'和'var x'有什么区别?
- 2. $('x> y'),$('y','x')和$('x y')之间有什么区别?
- 3. {$ var}和$ var之间有什么区别?
- 4. 让利之间创建一个函数x = 10和X <时有什么区别 - 在Haskell
- 5. Byte.decode(“10”)和Byte.valueOf(“10”) - 有什么区别?
- 6. 演员之间有什么区别:(A)x和x为A?
- 7. (void **)&x和(void *)x有什么区别?
- 8. 在Objective-C中Type * var和Type * var之间有什么区别?
- 9. Angular 1.X和2.X之间的区别是什么
- 10. Rails 1.X和2.X之间的主要区别是什么
- 11. SproutCore 1.x和2.0之间有什么区别?
- 12. 在Firefox中,Web控制台和浏览器控制台的区别
- 13. Skript和控制台之间的区别
- 14. JavaScript:定义变量之间的区别`var x; var y;`vs`var x,y;`?
- 15. AIR和浏览器有什么区别?
- 16. 来自浏览器插件的控制台输出Mac OS X?
- 17. 成本函数,sum(x)和ones(1,length(x))* x之间的区别是什么?
- 18. 在bash脚本中$ {VAR:-...}和$ {VAR:?...}之间的区别是什么
- 19. float x []与float [] x有什么区别?
- 20. chr(13)和chr(10)之间的区别
- 21. java中a + = 10和a = a + 10之间的区别?
- 22. 相同(x,y)和isTRUE(all.equal(x,y))之间的R有什么区别?
- 23. 如果X是类,“const X a”和“X const a”之间的区别是什么
- 24. 格式化时间字符串中%X和%x有什么区别?
- 25. 控制器和服务之间有什么区别?
- 26. 控制器和codeigniter库之间有什么区别?
- 27. Python中的if bool(x)`和if x`有什么区别吗?
- 28. INT(10)和INT(12)之间有什么区别(应用于我的代码时)?
- 29. 1.1em和1.05em之间有什么区别?
- 30. python3.x中raw_input()和input()之间的区别是什么?
没有...'X = 10'将返回所以10打印在控制台当你说...'变种X值= 10',没有值返回,这就是为什么undefined'在浏览器控制台 –