未绑定的JavaScript文字会发生什么?

时间:2017-06-29 20:10:46

标签: javascript

未绑定(也已分配)到变量的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

中找不到具体规则

5 个答案:

答案 0 :(得分:8)

这些是“表达式陈述”。评估此类表达式,但由于未分配这些表达式,因此不会存储它们的值。 JavaScript引擎可能会检测到那些没有副作用的引擎,并将它们消除,就好像它们从未存在过一样。

但至少其中一个有影响:

 "use strict";

这具有JavaScript directive

的含义

来自EcmaScript specification

  

使用严格指令是指令序言中的 ExpressionStatement ,其 StringLiteral 是确切的代码单元序列"use strict"'use strict'。< / p>

另请注意,在指令序言中使用时,其他字符串文字可能具有特殊含义:

  

实现可以为 ExpressionStatement 制作定义实现特定含义,这些制作不是使用严格指令,而是出现在指令序言中。

答案 1 :(得分:6)

它只是一个expression statement,它可以评估 - 没有副作用 - 一个被丢弃的值。

如果您在eval或REPL中尝试此操作,则可以看到该语句的结果。

答案 2 :(得分:1)

这些值存储在内存中,直到它们被垃圾收集器清理,因为没有任何内容指向内存中的那个位置。

答案 3 :(得分:0)

由于没有存储该值(即没有分配空间来保存您的文字),浏览器或多或少会忽略它,并且垃圾收集器也没有开销。至少代码的功能不会改变。你的javascript文件当然会有点大,因为它包含更多(无用的)文本。

答案 4 :(得分:0)

它似乎将它们视为未插入的变量。它会把它们视为无论如何都不存在。试试吧:

&#13;
&#13;
<html>

<body>
  <button onclick="myFunction()">Call Javascript</button>
</body>

</html>
&#13;
Settings > Live Template
&#13;
&#13;
&#13;

如您所见,空字符串存在时没有任何反应。这是一个有趣的问题,所以我很想听听其他任何结果。