Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当“引用”时如何引用对象的实例;使用“严格”;;已经申报了吗?_Javascript_Object_Reference_Instance_Strict - Fatal编程技术网

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();