Javascript 当“引用”时如何引用对象的实例;使用“严格”;;已经申报了吗?
我已经创建了一个对象并实例化了它 当我想访问其成员(属性、属性…)时,会发出一条错误消息 如何解决这个问题 将代码上的错误作为注释查看Javascript 当“引用”时如何引用对象的实例;使用“严格”;;已经申报了吗?,javascript,object,reference,instance,strict,Javascript,Object,Reference,Instance,Strict,我已经创建了一个对象并实例化了它 当我想访问其成员(属性、属性…)时,会发出一条错误消息 如何解决这个问题 将代码上的错误作为注释查看 <script type="text/javascript"> "use strict"; var v = 25; var dObj = function(){ var v = 100; var f=(function(){ console.log("Insiding...")
<script type="text/javascript">
"use strict";
var v = 25;
var dObj = function(){
var v = 100;
var f=(function(){
console.log("Insiding...")
})();
console.log(v); // v locale
console.log(window.v); // v globale.
}
var iObj = dObj();
// THE ERROR LAYS HERE //
// Uncaught TypeError: Cannot read property 'v'
// of undefined at this.html:19 [YANDEX]
console.log(iObj.v);
// And Here too. TypeError:
// iObj is undefined this.html:22:1 [FIREFOX]
iObj.f();
</script>
“严格使用”;
var v=25;
var dObj=函数(){
var v=100;
var f=(函数(){
控制台日志(“内部…”)
})();
console.log(v);//v locale
console.log(window.v);//v globale。
}
var iObj=dObj();
//错误就在这里//
//未捕获的TypeError:无法读取属性“v”
//在this.html:19[YANDEX]中未定义的
控制台日志(iObj.v);
//这里也是。类型错误:
//iObj未定义。html:22:1[FIREFOX]
iObj.f();
Javascript中的var
关键字声明了一个变量;它不声明或分配任何对象的属性。看起来像是你想写的:
var dObj = function () {
return {
v: 100,
f: function(){
console.log("Insiding...")
},
};
};
调用函数时,例如dObj()
,函数调用的值是函数的“返回值”,即函数中第一条return
语句旁边的表达式。这里,这是一个对象文本,它有两个属性,v
和f
在原始代码中,
使用strict代码>启用严格模式,这实际上不是错误的原因。然后var v=25
声明了一个变量v
,该变量实际上从未使用过。那么您就有了dObj
的以下定义:
var dObj = function(){
var v = 100;
var f=(function(){
console.log("Insiding...")
})();
console.log(v); // v locale
console.log(window.v); // v globale.
}
这声明了一个函数dObj
,该函数在调用时执行以下操作。它创建一个局部变量v
(隐藏先前创建的v
),并将其值设置为100
然后,它创建另一个局部变量f
,并将其设置为IIFE的返回值(“立即调用的函数表达式”)(function(){console.log(“insining…”)})(
——它是未定义的
。此iLife还向控制台输出“内部…”。换句话说,该代码不会使f
成为函数。相反,它对匿名函数求值(此处输出“insining…”),并将f
作为其返回值(此处为未定义的
)
然后输出局部变量v
,输出100
最后,它输出window.v
,它是未定义的
。(如果您之前编写了window.v=25
,您将为window
对象指定一个新属性,这样它将输出25
,而不是未定义的。window
也是浏览器中的全局对象,因此可以实现与window.v=25
相同的效果ed如果您没有编写“使用严格的”
,并且编写v=25
时没有var
,但这样做会造成各种混乱,因此您使用“使用严格的”是正确的。)
这将iObj
设置为dObj
函数的返回值,该函数是未定义的
,因为没有return
语句。但是,dObj
运行到完成:即它输出内部…
,100
,以及未定义的
最后,有两条语句都会抛出错误:
console.log(iObj.v);
iObj.f();
这两个都会抛出错误,因为iObj
没有定义,也没有属性可言。我认为错误根本不取决于“使用严格的”
。dObj
函数不返回任何内容,因此iObj
确实是未定义的。您能用一个具体的例子解释一下吗?发布了一个答案,这就足够了吗?
console.log(iObj.v);
iObj.f();