你真的了解JavaScript吗
Posted Befacebook
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的了解JavaScript吗相关的知识,希望对你有一定的参考价值。
第一题
其实就是变量提升的概念
var a;
if(!(\'a\' in window)){
a = 1;
}
console.log(a);
第二题
这里就是函数声明会覆盖变量声明了; 即使函数声明写在变量声明的后面。也会覆盖,但是函数表达式不会覆盖。
第三题
函数上下文中的变量对象一节就可以清楚地知道,活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。arguments属性的值是Arguments对象:
Arguments对象是活动对象的一个属性,它包括如下属性:
- callee — 指向当前函数的引用 arguments.callee.length 就是形参个数 也可以使用函数名字.length; 其实 funName.length === arguments.callee.length;
- length — 真正传递的参数个数
- 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中的数组(Array)方法你真的了解吗?
JavaScript中的数组(Array)方法你真的了解吗?