1、

 if (!("a" in window)) {
var a = 1;
}
alert(a);

阅读代码:如果window不包含属性a,就声明一个变量a,然后赋值为1,最后弹出这个变量的值。

理解代码:javascript没有块级作用域,所以var a=1;定义的a是全局的,又因为全局的变量都是window的属性(注意没有用var声明的变量也是全局的也是window的属性但是不能被delete);所以执行过程是进不了if内部的,又因为变量什么的提升,其实在执行if(判断语句)的时候,a其实已经存在于执行上下文的变量对象中了,上面的代码相当于:

 var a;
if (!("a" in window)) {
a = 1;
}
alert(a);

再次拟请代码:首先声明a,然后判断a是否在存在(是不是window的属性),如果不存在就赋值为1,很明显a永远在window里存在,这个赋值语句永远不会执行,所以结果是undefined。

1 var a = undefined;
2 if (!("a" in window)) {
3 a = 1;
4 }
5 alert(a);

2、

 var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);

阅读代码:首先定义变量a并赋值为1;然后定义一个函数表达式赋值给b;但是这个函数表达式是个有名函数表达式,在这里不同的浏览器会有不同的解析:在IE里,会将a认为函数声明,所以它被变量初始化覆盖了(后续谈一下变量覆盖问题),就是说如果调用a(--x)的话就会出错(因为a是一个变量),而其它浏览器在允许在函数内部调用a(--x),因为这时候a在函数外面依然是数字,在函数内就是本身的函数声明。上面的代码其实可以完全不看b这个函数表达式,所以以上代码执行的结果为alert出1。

 var a = 1,
b = function(x) {
x && b(--x);
};
alert(a);

变量覆盖问题:函数声明会覆盖变量声明,但不会覆盖变量赋值(函数声明的优先级高于变量声明的优先级,但如果该变量value赋值了)

 function value(){
return 1;
}
var value;
alert(typeof value); //"function"
 function value(){
return 1;
}
var value = 1;
alert(typeof value); //"number"

3、

 function a(x) {
return x * 2;
}
var a;
alert(a);

//就是第二题的函数声明覆盖变量声明

4、

 function b(x, y, a) {
arguments[2] = 10;
alert(a);//10;
}
b(1, 2, 3);

首先理解Arguments对象,他有一下三个属性:

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

当传入函数的参数小于argument的索引值时,比如你只传入2个参数,而还继续使用arguments[2]赋值的话,就会不一致,

 function b(x, y, a) {
arguments[2] = 10;
alert(a);//undefined;
4   alert(arguments[2]);//10;
}
b(1, 2);

5、

 function a() {
alert(this);
}
a.call(null);

这道题有几个点:this、call、null;

this--谁调用就指向谁;

call--第一个参数改变this指向;

null--指代的是window。

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

 function a() {
alert(this);//window;
}
a.call(window);

这五个题你懂了javascript你就入门了的更多相关文章

  1. 让你能看懂的 JavaScript 闭包

    让你能看懂的 JavaScript 闭包 没有废话,直入主题,先看一段代码: var counter = (function() { var x = 1; return function() { re ...

  2. [转帖]五分钟彻底搞懂你一直没明白的Linux内存管理

    五分钟彻底搞懂你一直没明白的Linux内存管理 https://cloud.tencent.com/developer/article/1462476 现在的服务器大部分都是运行在Linux上面的,所 ...

  3. JavaScript 10分钟入门

    JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...

  4. 一看就懂的Android APP开发入门教程

    一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤 ...

  5. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

    本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...

  6. SharePoint Javascript客户端应用入门

    SharePoint Javascript客户端应用入门 大家可以点击观看视频

  7. Python自动化 【第十五篇】:CSS、JavaScript 和 Dom介绍

    本节内容 CSS javascript dom CSS position标签 fixed: 固定在页面的某个位置 relative + absolute: 相对定位 opacity:0.5 设置透明度 ...

  8. 【Codeforces Round 431 (Div. 2) A B C D E五个题】

    先给出比赛地址啦,感觉这场比赛思维考察非常灵活而美妙. A. Odds and Ends ·述大意:      输入n(n<=100)表示长度为n的序列,接下来输入这个序列.询问是否可以将序列划 ...

  9. ERP行业内幕看了这五个问题全懂了

    ERP系统是现代企业实现信息化管理的必经之路.但很多管理人员或已经在用ERP的人员,其实并不太懂ERP系统是什么意思,有哪些好处等,导致实际使用过程中经常大材小用,或者“英雄无用武之地”.所以,为了更 ...

随机推荐

  1. LIBSVM的使用方法

    [原文:http://wenku.baidu.com/view/7e7b6b896529647d27285276.html] 目  录 1 Libsvm下载... 3 2 Libsvm3.0环境变量设 ...

  2. 面向对象基础3(class0523)

    怎么实现多态2-接口 接口是定义一种能力,规定子类能干什么和抽象类有些相似,解决类的单根继承.接口可以实现多继承 案例 鸟-麻雀sparrow,鸵鸟ostrich,企鹅penguin,鹦鹉parrot ...

  3. uva11732 strcmp() Anyone?

    题意:给出多个字符串,两两配对,求总配对次数. 思路:如果两个字符串一样,ans=strlen(字符串)*2+2,如果不同,ans=公共前缀长度*2+1:用左儿子右兄弟建字典树.插入一个字符计算一次. ...

  4. python包管理工具

    pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.本文将详细说明 安装 pip 的方法和 使用 pip 的一些基本操作如安装.更新和卸载 python ...

  5. HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口

    1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...

  6. _int、NSInteger、NSUInteger、NSNumber的区别和联系

    1.首先先了解下NSNumber类型: 苹果官方文档地址:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/F ...

  7. 图形用户界面(graphical user interface)

    1 java中提供的类库 1.1 定义 AWT(abstract windows toolkit)抽象窗口工具包:提供了与本地图形界面进行交互的接口,AWT中提供的图形函数与操作系统的图形函数有着对应 ...

  8. 使用poi将word转换为html

    使用poi将word转换为html,支持doc,docx,转换后可以保持文字.表格.图片.样式 演示地址: https://www.xiaoyun.studio/app/preview.html 完整 ...

  9. gmt学习资源

    1 http://seisman.info/ http://examples.gmt-china.org/ http://docs.gmt-china.org http://modules.gmt-c ...

  10. Android设计模式系列--模板方法模式

    模板方法,和单例模式是我认为GOF的23中最简单的两种模式.但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分 ...