在 JavaScript 中引入局部变量的所有方法是什么,它们绑定了什么?
What are all the ways to introduce local variables in JavaScript and what do they bind?
我正在为 JavaScript 编写一个静态分析器,我必须在代码的任何点跟踪所有局部变量。在 JavaScript 中将新的局部变量引入范围的所有方法是什么?
函数表达式(而不是函数声明语句)将(可选)函数名称绑定到创建函数内部(但不在外部)的环境。 这是一个测试:
function f1() {
function f2(n) {
if (n) {
f2 = null;
f2(0);
}
else
console.log("f2");
}
f2(1);
console.log(typeof f2);
}
f1();
这将引发错误,因为使用 null
覆盖"f2"会更新外部 ("f1") 作用域中符号"f2"的值。 现在,这个变体:
function f1() {
var f2 = function f2(n) {
if (n) {
f2 = null;
f2(0);
}
else
console.log("f2");
}
f2(1);
console.log(typeof f2);
}
f1();
这有效(首先记录"f2",然后记录"函数")。 对"f2"的赋值不会引发错误,但它不会执行任何操作,因为名称"f2"被绑定为范围的不可变属性。 赋值既不影响内部"f2",也不会影响外部"f2"。
以下是我到目前为止确定的所有内容:
- 标准库包括以下全局变量:
Array Boolean Date Function Number Object RegExp String Error EvalError RangeError ReferenceError SyntaxError TypeError URIError decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseIn Infinity JSON Math NaN undefined
。 - 变量声明在作用域中引入变量,例如
var a, b, c, d=4
.- 请注意,变量声明都被提升了,例如
function () { foob(x); var x = 12; }
在功能上等同于function () { var x; foob(x); x = 12; }
- 请注意,变量声明都被提升了,例如
- 函数语句和表达式。它们不仅绑定参数列表,还创建局部
arguments
变量。- 请注意,函数语句也被提升,例如
function () { funcstatement(12); if (false) { function funcstatement(y) { y + 4; } } }
在功能上等同于function () { function funcstatement(y) { y + 4; }; funcstatement(12); if (false) {}; }
- 请注意,函数语句也被提升,例如
- 命名函数表达式在函数的作用域中引入名称,例如
var x = function name() { /* 'name' available here */ }
. -
try {} catch (e) {}
仅在 catch 子句的范围内引入变量e
。
相关文章:
- 当绑定到AngularJS中的函数时,会在后台发生什么
- 绑定返回的结果和使用function()的结果之间有什么区别
- 在表单提交将DOM的一部分替换为分部之后,我应该将ajax成功绑定到什么来使我的javascript工作
- 为D3.js动画编写绑定的正确方法是什么
- setTimeout vs. 事件绑定/取消绑定;什么更有效
- 在 aurelia 中使用 repeat.for 绑定自定义元素的正确方法是什么
- 那么承诺和AngularJS中的绑定有什么区别
- 将所有函数绑定到窗口对象有什么用
- 绑定函数的返回语句中参数的推理是什么
- 在后台发生什么,以防止调用更改此对象的绑定方法
- 在 Angular 1.5 中使用“单向绑定”(<)有什么意义
- on() 和 off(),on() 立即触发,但我希望它像绑定或生活一样“行动”,这里有什么问题
- 如果函数的 toString() 以“绑定:”开头,这意味着什么?
- 在 JavaScript 中引入局部变量的所有方法是什么,它们绑定了什么?
- 什么是 ractivejs 中焦点的反向绑定
- 在Ember.js视图中刷新jQuery绑定的正确方法是什么
- D3这两种数据绑定方式有什么区别
- angularjs中支持单向绑定的指令是什么
- 如果我将一个JavaScript事件绑定到一个元素,然后删除该元素,事件会发生什么
- Javascript引用与绑定..什么'有什么不同吗