我尝试在js中使用范围变量,并使用工具。我试图访问闭包变量,如下所示:
"use strict"
var Dog = function(){
this.color = "brown";
this.weight = "10";
}
Dog.prototype.generateCode = function(){
var codeSeparator = "#";
var _this = this;
return label();
function label(){
debugger;
return _this.color + _this.weight;
}
}
var d = new Dog();
d.generateCode();当我试图访问变量codeSeparator时,使用chrome工具时会出现错误,但是火狐没有问题。
另一方面,如果在函数中使用变量,chrome似乎很好:
//...
function label(){
debugger;
return _this.color + codeSeparator + _this.weight;
} 我不确定这是一个带有chrome开发工具的bug,还是我没有得到的JS概念。
发布于 2018-04-04 15:40:43
Chrome的V8有一个名为Dead Code Elimination的特性
如果您不在任何地方使用codeSeparator,V8可能会删除此代码。
参考资料:
https://blog.ghaiklor.com/optimizations-tricks-in-v8-d284b6c8b183 https://chromium.googlesource.com/v8/v8/+/roll/src/compiler/dead-code-elimination.cc
https://stackoverflow.com/questions/49655085
复制相似问题