ECMAScriptjavascript ES3小测试

壹 、温故知新

做做题,总是能有温故知新的体验。那套题是二零零六年的了,相比较老了,

http://perfectionkills.com/ 
还有一套http://perfectionkills.com/javascript-quiz-es6 比较新ES6相关的。

在这一个页面有14道ECMAScript相关的题,小编试了下答错了6道题,某些知识,感觉着会了,别人说出来肯定能懂,然则自身做题却不肯定对,正是因为驾驭的还不够深入,或然回想出错等,上边来分析一下。

ECMAScript 1

 

② 、分析一下每道题的考试场点和规律

不会把每一个知识点都详细讲解,有些是点到完工,有个别会付出参考链接。

1、考点:typeof和arguments

(function(){
    return typeof arguments;
  })();

ECMAScript 2ECMAScript 3

剖析:typeof重临值有”string”/”number”/”undefined”/”boolean”/
“function”/”object”。叩问越多

而arguments是1个类数组,并不是实在的数组,所以很显眼是typeof再次来到值是”object”。打探更多

贰 、考试场点:命名式函数表达式NFE【小编答错了】

 var f = function g(){ return 23; };
 typeof g();

ECMAScript 4ECMAScript 5

浅析:var f=function g(){} 是3个命名函数表明式(NFE)。

typeof g()重返g函数调用后的结果的typeof值。

在效用域链上找g那几个变量时一向找不到,所以会报错:g is not a function。

就此正确答案正是D了。

标准规定:命名函数表达式名字(标识符)在函数体的效率域内行之有效,且无法被掩盖。问询越来越多

叁 、考试场点:delete【笔者答错了】

  (function(x){
    delete x;
    return x;
  })(1);

ECMAScript 6ECMAScript 7

IIFE对应的变量对象上有1个x值为流传的1,也正是是var阐明的,所以是不可能被delete掉的。

delete x再次来到false。return x重回的值依旧1.

ECMAScript 8

于是正确答案是1

铭记一点:delete运算符无法去除变量,无法去除参数,用来删除对象上configurable为true的属性
询问越多

四 、考点:变量注脚,执行上下文

 var y = 1, x = y = typeof x;
 x;

ECMAScript 9ECMAScript 10

分析:var y=1,x=y=typeof x;相当于

第一步:y=undefined,x=undefined;

第一步:typeof
x再次回到“undefined”字符串,把这一个字符串赋值给y变量,然后赋值给x变量,所以最终x和y的值都是字符串“undefined”。摸底越来越多

5、考点:优先级

(function f(f){
    return typeof f();
 })(function(){ return 1; });

ECMAScript 11ECMAScript 12

 

解析:函数调用()优先级比 typeof优先级高

IIFE中传入参数是多少个函数,调用后,先实行那几个函数,得到结果数字1, typeof
1再次回到”number”所以答案正是”number”。打听越来越多

6、考点:this

  var foo = {
    bar: function() { return this.baz; },
    baz: 1
  };
  (function(){
    return typeof arguments[0]();
  })(foo.bar);

ECMAScript 13ECMAScript 14

 

分析:

foo是1个指标,对象里面有贰脾质量baz,三个措施bar。在IIFE中传入叁个参数foo.bar,foo.bar是三个函数,

调用的时候,函数先进行,重临2个this.baz。此时this指向window对象,window.baz不存在,所以重临undefined,而typeof
undefined返回”undefined”。摸底愈多

7、考点:this

var foo = {
    bar: function(){ return this.baz; },
    baz: 1
  }
  typeof (f = foo.bar)();

ECMAScript 15ECMAScript 16

 

把foo.bar属性赋给f,此时f是一个函数,调用后this执向window,window.bar不存在,重返undefined,typeof
undefined再次回到“undefined”。

8、考试场点:逗号运算符【作者答错了】

var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;

ECMAScript 17

ECMAScript 18

那道题考察的是逗号运算符。

f是1个随即施行的表达式,逗号表明式的值是终极3个表达式既function
g(){},所以立即调用g函数再次来到2,typeof 2就是“number”。

逗号表明式会从左到右依次总计表明式的值,最终取最左边的。刺探越多

自己把逗号运算符取值记成左侧了,所以答错了。

⑨ 、坑【小编答错了】

var x = 1;
  if (function f(){}) {
    x += typeof f;
  }
  x;

ECMAScript 19ECMAScript 20

分析:function
f(){}是个变量证明,大家一贯写代码不容许把一个函数表明放到if语句中,不过测试一下if中放贰个函数申明的话条件为真内容是会举办的。

ECMAScript 21

而typof f去查找f的时候,在它的成效域中找不到,所以typeof
f重临”undefined”字符串,所以x+=”undefined”最后x的值正是”1undefined”。

10、考点

var x = [typeof x, typeof y][1];
typeof typeof x;

ECMAScript 22

浅析:typefo再次回到的自小编正是个字符串,再来壹次typeof肯定”string”。那是个投机取巧的思维。

 

11、

(function(foo){
    return typeof foo.bar;
  })({ foo: { bar: 1 } });

ECMAScript 23ECMAScript 24

 

解析:IIFE中传入一个对象字面量有贰本性质foo,foo的值是三个含有二个bar属性的靶子。调用时,获取参数对象中的bar属性,并没有这么些特性,所以再次回到undefined,typeof
undefined再次回到“undefined”。

1贰 、考试场点:函数证明预解析【笔者答错了】

(function f(){
    function f(){ return 1; }
    return f();
    function f(){ return 2; }
  })();

ECMAScript 25ECMAScript 26

当即执行的f函数里面,在变量注解阶段声爱他美(Aptamil)个f值是八个函数申明,被前边的函数表明覆盖了,所以是f的值是function
f(){return 2;}

小编记错了,变量注明阶段函数的扬言直接就赋值了,所以答案正是2。刺探愈多

1三 、考试场点:instanceof【我答错了】

 function f(){ return f; }
 new f() instanceof f;

ECMAScript 27

布局函数function f(){

return f;//再次来到值是f,效用域链向上查找,能找到f=>function f(){return
f;} 因为f不是骨干项目,所以会重回f。

}

由此new f()调用的结果是f函数自己。所今后后题材就改成了f instanceof
f是true依然false。

ECMAScript 28

function
A(){}是Function的实例,A的原型链上找不到A.prototype属性,所以instanceof再次回到false。

ECMAScript 29

打听越来越多

14、考点:with语句

with (function(x, undefined){}) length;

ECMAScript 30

浅析:也就是获取with中匿名函数的莫过于参数的个数

 

 

正文作者starof,因知识本身在转移,笔者也在相连学习成才,小说内容也不安时更新,为幸免误导读者,方便追根溯源,请各位转发注脚出处:http://www.cnblogs.com/starof/p/6816474.html不经常欢迎与本身谈谈,共同进步。