js函数中声明的变量和未声明的变量
declared vs undeclared variables in a js function
在下面这段代码中(摘自"Secrets of the JavaScript Ninja"的一个函数的简短版本),我不理解"初始化"变量在声明时和未声明时的行为。
如果我声明了它,那么它的值总是假的。我注意到的另一件事是,变量声明的方式只有在proto = new this()时才相关,如果proto = new Class(),则"initialize"变量具有可预测的行为。有人能好心地给我解释一下这种行为的动力吗?
Object.subClass = function(properties) {
initializing = true;
var proto = new this();
initializing = false;
function Class() {
console.log(initializing)
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // true
var instance = new subConstructor() // false
// if var initializing = true;
var proto = new this();
initializing = false;
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // false
var instance = new subConstructor() // false
谢谢你的回复,我很抱歉没有把我的意思表达清楚。这里是另一个尝试:
Object.subClass = function(properties) {
initializing = true;
var proto = new this();
initializing = false;
function Class() {
console.log(initializing)
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // true
var instance = new subConstructor() // false
Object.subClass = function(properties) {
var initializing = true;
var proto = new this();
initializing = false;
function Class() {
console.log(initializing)
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // false
var instance = new subConstructor() // false
我知道这是一种糟糕的方式来实现基于原型的编程,我的问题源于初始化变量的行为。
可以在Object的第一个例子中看到。子类,未声明的"初始化"变量,当调用时,根据调用的上下文返回true或false
在Object的第二个例子中。子类,声明的'初始化'变量,当调用时,只返回false,而不管调用的上下文。
相关文章:
- 是否可以在另一个变量中使用未声明的变量
- Coffeescription:循环中的条件变量未正确声明
- 是否可以在 Javascript 中将未声明的变量作为参数传递
- Javascript未声明变量
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- 为什么以及如何使用 jQuery 未声明的变量作为 ID
- 在 Angular 服务中接收函数的未声明变量
- 让 javascript 将(默认情况下)未声明的变量声明到当前本地范围(基于首次使用)而不是全局范围
- 在 JavaScript 中,未声明的变量赋值可以在函数范围之外访问
- JS中的未声明变量自动拾取DOM对象
- 如何避免未声明的变量破坏智能感知
- 如何评估潜在未声明变量的属性
- 为什么要在javascript中保留未声明的变量
- 区分已声明变量和未声明变量2的方法
- 区分已声明变量与未声明变量的方法
- 如何检查变量是未定义的(已声明但未赋值)还是未声明的(不存在)
- 函数中未声明的JavaScript变量覆盖使用
- Javascript变量已声明并初始化,但在检查时未定义
- 为什么不用“strict”呢?(JavaScript)检测未声明的变量
- 引用错误变量未声明