首页 > 代码库 > 你认为你很了解Javascript?(个人解答)
你认为你很了解Javascript?(个人解答)
代码来源:http://www.ido321.com/914.html
代码来源:http://dmitry.baranovskiy.com/post/91403200
纯属个人理解,欢迎大神指正、
1.
1 if (!("a" in window)) {2 3 var a = 1;4 5 }6 7 alert(a); //undefined
js中没有块级作用域,所以a会提前声明,"a" in window会得到true,所以并不会对a进行赋值操作
2.
1 var a = 1,2 3 b = function a(x) {4 5 x && a(--x);6 7 };8 9 alert(a); //1
先参考如下代码
1 var f = function g(){2 alart(g); //弹出g的函数体3 };4 alert(g); //会报错,g is not undefined
g仅在其函数体内起作用。
所以b=function a(x){... }并不会对全局变量a产生影响、
3.
1 function a(x) {2 3 return x * 2;4 5 }6 7 var a;8 9 alert(a); //弹出函数体
这个好像没有什么悬念,函数声明会先于任何语句之前执行,第七行仅仅重新声明a,但并不会对a做任何改变、
1 var fn = 1;2 function fn(){3 alert("fn");4 }5 alert(fn);// 1
假如重新对fn进行赋值的话,将会改变fn,关于函数声明和函数表达式的内容可以参考汤姆大叔的详细讲解(http://www.cnblogs.com/TomXu/archive/2011/12/29/2290308.html)
4.
1 function b(x,y,a){2 arguments[2]=10;3 alert(a); 4 } 5 b(1,2,3); //10
其实在函数体内,a和arguments[2]都是对同一参数的引用,如下:
1 function fn(v){2 alert(arguments[0]===v); 3 }4 fn(10); //true
但是当传递的参数值为空的时候,如果在函数体内对v或者arguments进行手动修改的话,将会导致不再是对同一对象的引用
1 function fn(v){ 2 //不对v和arguments做任何修改 3 alert(v === arguments[0]); //true 4 5 6 v = 10; 7 alert(v);//10 8 alert(arguments[0]);//undefined 9 alert(arguments[0]===v); //false 10 11 /*12 arguments[0]=10;13 alert(arguments[0]);//1014 alert(v);//undefined15 alert(arguments[0]===v);//false */16 }17 fn();
5.
1 function a() {2 3 alert(this);4 5 }6 7 a.call(null);
javascript中call的语法为 call(thisObj,arg1,...,argn)
参数thisObj:可选项,将被用作当前对象的对象。
参数arg1,...,argn:可选项,将被传递方法参数序列。
如果没有thisObj为空,则默认使用Global(window)进行调用:
1 function fn(){2 alert(this);3 }4 fn.call(null);//[object window]5 fn.call();//[object window]6 fn.call(undefined);//[object window]7 fn.call(window);//[object window]
你认为你很了解Javascript?(个人解答)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。