未绑定(也已分配)到变量的JavaScript文字(字符串,数字)会发生什么?
// A comment
"Practically, also a comment"
var assigned = "something"
53
423.0022
NaN
"does it impact performance"
// or is it treated just like a comment?
浏览器似乎忽略了它们,但我在spec
中找不到具体规则答案 0 :(得分:8)
这些是“表达式陈述”。评估此类表达式,但由于未分配这些表达式,因此不会存储它们的值。 JavaScript引擎可能会检测到那些没有副作用的引擎,并将它们消除,就好像它们从未存在过一样。
但至少其中一个有影响:
"use strict";
的含义
使用严格指令是指令序言中的 ExpressionStatement ,其 StringLiteral 是确切的代码单元序列
"use strict"
或'use strict'
。< / p>
另请注意,在指令序言中使用时,其他字符串文字可能具有特殊含义:
实现可以为 ExpressionStatement 制作定义实现特定含义,这些制作不是使用严格指令,而是出现在指令序言中。
答案 1 :(得分:6)
它只是一个expression statement,它可以评估 - 没有副作用 - 一个被丢弃的值。
如果您在eval
或REPL中尝试此操作,则可以看到该语句的结果。
答案 2 :(得分:1)
这些值存储在内存中,直到它们被垃圾收集器清理,因为没有任何内容指向内存中的那个位置。
答案 3 :(得分:0)
由于没有存储该值(即没有分配空间来保存您的文字),浏览器或多或少会忽略它,并且垃圾收集器也没有开销。至少代码的功能不会改变。你的javascript文件当然会有点大,因为它包含更多(无用的)文本。
答案 4 :(得分:0)
它似乎将它们视为未插入的变量。它会把它们视为无论如何都不存在。试试吧:
<html>
<body>
<button onclick="myFunction()">Call Javascript</button>
</body>
</html>
&#13;
Settings > Live Template
&#13;
如您所见,空字符串存在时没有任何反应。这是一个有趣的问题,所以我很想听听其他任何结果。