你认为你很了解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]);//10
14                 alert(v);//undefined
15                 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]
时间: 2024-12-17 11:48:23

你认为你很了解Javascript?(个人解答)的相关文章

你认为你很了解Javascript?

(翻译不当之处请谅解) 来源:http://www.ido321.com/914.html 这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域.没有在控制台运行之前,尝试回答每个案例中会弹出什么内容,然后你可以创建一个测试文件去核对你的答案.你准备好了吗? 1. 1: if (!("a" in window)) { 2: var a = 1; 3: } 4: alert(a); 2. 1: var a = 1, 2: b = function a(x) { 3:

JavaScript - 收藏集 - 掘金

Angular 中的响应式编程 -- 浅淡 Rx 的流式思维 - 掘金第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第五节:多用户版本的待办事项应用第六节:使用第三方样式库及模块优化用第七节:给组件带来活力Rx--隐藏在 Angular 中的利剑Redux你的 A... Electron 深度实践总结 - 前端 - 掘金思维导图 前言: Electron 从最初发布到现在已经维护很长一段时间了,但是去年才开始慢慢升温.笔者个人恰好

JavaScript基础关于JSON(011)

JSON意即JavaScript Object Notation,是JavaScript里数据表示的通用格式,JSON数据格式很象JavaScript里的对象: {"name": "value", "some": [1, 2, 3]} 所不同的是,相对于对象中的属性名,在JSON中的键名,必须使用引号包起来.对象声名时只有在特殊的属性名中才需要这样做: {"first name": "Dave"}. 将一个

【JavaScript】JavaScript中的陷阱大集合

本文主要介绍怪异的Javascript,毋庸置疑,它绝对有怪异的一面.当软件开发者开始使用世界上使用最广泛的语言编写代码时,他们会在这个过 程中发现很多有趣的“特性”.即便是老练的Javascript开发者也可以在本文找到一些有趣的新陷阱,请留意这些陷阱,当然也可以尽情享受由这些陷阱 带来的“乐趣”! AD: 本文主要介绍怪异的Javascript,毋庸置疑,它绝对有怪异的一面.当软件开发者开始使用世界上使用最广泛的语言编写代码时,他们会在这个过 程中发现很多有趣的“特性”.即便是老练的Java

【JavaScript】使用面向对象的技术创建高级 Web 应用程序

本文讨论: JavaScript 是基于原型的语言 用 JavaScript 进行面向对象的编程 JavaScript 编码技巧 JavaScript 的未来 本文使用了以下技术: JavaScript   目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript 代码吗? 展望 最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直

javascript里的偏函数——本质函数式编程+闭包,返回函数

除非你已经使用过其他的函数式编程,不然你可能对下面这两个概念很陌生:"偏函数应用"和"函数柯里化". 偏函数应用,英文是partial application,也可以译作"局部应用"."部分应用"."偏应用" 函数柯里化,英文是currying,也可以译作"局部套用"."加里化"."卡瑞化" 话虽如此,但是假如你一旦理解了这两个概念,你就完全可以在

【译】JavaScript 创建对象: 方法一览与最佳实践

本文是我在众成翻译上认领并翻译的:JavaScript 创建对象: 方法一览与最佳实践 在JavaScript中“创建对象”是一个复杂的话题.这门语言提供了很多种创建对象的方式,不论新手还是老手都可能对此感到无所适从,不知道应该选择哪一种.不过,尽管创建对象的方法很多,看上去语法差异也很大,但实际上它们的相似性可能比你所以为的要多.本文将带领你踏上一段梳理对象创建方法的旅程,为你揭示不同方法之间的依赖与递进关系. 对象字面量 我们的第一站毫无疑问就是创建对象最简单的方法,对象字面量.JavaSc

javascript线程解释(setTimeout,setInterval你不知道的事)

原文:http://www.iamued.com/qianduan/1645.html 今天看到这篇文章,学到了不少东西 特此发出来 和大家分享 JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( function(){ alert('你好!'); } , 0); setInterval( callbackFunction , 100); 认为se

javascript对象的属性,方法,prototype作用范围分析

读了篇博客感觉很有用"javascript对象的属性,方法,prototype作用范围分析"就自己写了一遍.以后自己可以用的到. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://