你真的了解JavaScript吗

Posted Befacebook

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的了解JavaScript吗相关的知识,希望对你有一定的参考价值。

第一题

  

  其实就是变量提升的概念

  var a;

  if(!(\'a\' in window)){

    a = 1;

  }

  console.log(a);

第二题

  

  这里就是函数声明会覆盖变量声明了; 即使函数声明写在变量声明的后面。也会覆盖,但是函数表达式不会覆盖。

第三题

  

  函数上下文中的变量对象一节就可以清楚地知道,活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。arguments属性的值是Arguments对象:

  Arguments对象是活动对象的一个属性,它包括如下属性:

  1. callee — 指向当前函数的引用  arguments.callee.length 就是形参个数 也可以使用函数名字.length; 其实 funName.length === arguments.callee.length;
  2. length — 真正传递的参数个数
  3. properties-indexes (字符串类型的整数) 属性的值就是函数的参数值(按参数列表从左到右排列)。 properties-indexes内部元素的个数等于arguments.length. properties-indexes 的值和实际传递进来的参数之间是共享的。

  这个共享其实不是真正的共享一个内存地址,而是2个不同的内存地址,使用javascript引擎来保证2个值是随时一样的,当然这也有一个前提,那就是这个索引值要小于你传入的参数个数,也就是说如果你只传入2个参数,而还继续使用arguments[2]赋值的话,就会不一致,例如:

第四题

  

  根据ECMAScript262规范规定:如果第一个参数传入的对象调用者是null或者undefined的话,call方法将把全局对象(也就是window)作为this的值。所以,不管你什么时候传入null,其this都是全局对象window。如果是alert(this); 就是 ‘[object Window]’;

 

以上是关于你真的了解JavaScript吗的主要内容,如果未能解决你的问题,请参考以下文章

你真的了解JavaScript吗

JavaScript中的数组(Array)方法你真的了解吗?

JavaScript中的数组(Array)方法你真的了解吗?

javascript中数组的方法你真的都了解吗?

前端知识体系-JS相关你真的了解JavaScript编译解析的流程吗?

你真的了解 “对象解构赋值” 吗?关于对象解构的全面解析 ✌