Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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/8/perl/10.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
为什么调用函数的'Type'在'JavaScript(ECMA-2625.1)'中不是'reference'?_Javascript_Ecmascript 5 - Fatal编程技术网

为什么调用函数的'Type'在'JavaScript(ECMA-2625.1)'中不是'reference'?

为什么调用函数的'Type'在'JavaScript(ECMA-2625.1)'中不是'reference'?,javascript,ecmascript-5,Javascript,Ecmascript 5,当我试图找出这个关键字的所有细节时,我的问题出现了。到目前为止,通过阅读ECMAScript®语言规范部分和,我了解了如何设置此值。在玩一些代码的时候,我的问题出现了,请看下面的代码 "use strict"; function test(){ alert(this); //undefined }; test(); 根据步骤1,给定thisArg,将在严格模式下分配给该值。根据步骤7,只有当Typeref不是引用时,thisArg才是未定义的 所以我的问题是,为什么Typeref在本例中不是引

当我试图找出这个关键字的所有细节时,我的问题出现了。到目前为止,通过阅读ECMAScript®语言规范部分和,我了解了如何设置此值。在玩一些代码的时候,我的问题出现了,请看下面的代码

"use strict";
function test(){
alert(this); //undefined
};
test();
根据步骤1,给定thisArg,将在严格模式下分配给该值。根据步骤7,只有当Typeref不是引用时,thisArg才是未定义的


所以我的问题是,为什么Typeref在本例中不是引用?

第7步在本例中不相关,因为它是第6步之后的else,它说:

6.如果Typeref为参考,则 a、 如果IsPropertyReferenceref为true,则 i、 让该值为GetBaseref。 b、 否则,ref的基础是环境记录 i、 让thisValue成为调用GetBaseref的隐式thisValue具体方法的结果


在您的例子中,testis是一个引用,而不是PropertyReference,因此使用implicitthis值。在严格模式下,该值未定义。

你是对的,我错了。因此,对于所有调用函数声明,它返回undefined?@beli基本上有四种可能的结果:1。函数是绑定的,这始终是绑定值:var func=function{console.logthis}.bindHello!;func;2.将未绑定函数作为属性引用调用,这是该属性引用的基础:var o={f:function{console.logthis;};o、 f;3.您单独调用一个未绑定函数,但这是未定义的:函数f{console.logthis;}f;。4.您使用.call或.apply调用未绑定函数,这是您指定的内容。@beli Javascript规范确实很复杂,不是吗?我想,要彻底定义一门在10天内设计好的语言,你需要经历这些扭曲谢谢,现在我明白了。是的,规格很复杂。我希望有一本书能用丰富的例子来解释它。