这五个题你懂了javascript你就入门了

1、

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

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

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

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

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

2、

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

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

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

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

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

3、

1 function a(x) {
2     return x * 2;
3 }
4 var a;
5 alert(a);

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

4、

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

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

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

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

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

5、

1 function a() {
2     alert(this);
3 }
4 a.call(null);

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

this--谁调用就指向谁;

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

null--指代的是window。

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

1 function a() {
2     alert(this);//window;
3 }
4 a.call(window);
时间: 2024-12-15 04:23:19

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

五个你必须知道的javascript和web debug技术

转:http://js8.in/2013/11/20/%E4%BA%94%E4%B8%AA%E4%BD%A0%E5%BF%85%E9%A1%BB%E7%9F%A5%E9%81%93%E7%9A%84javascript%E5%92%8Cweb-debug%E6%8A%80%E6%9C%AF/ 在前端开发中,调试技术是必不可少的技能,本文将介绍五种前端开发必备的调试技术. Weinre移动调试 DOM 断点 debugger断点 native方法hook 远程映射本地调试 Weinre 在移动上面

Ext JS学习第五天 我们所熟悉的javascript(四)

此文用来记录学习笔记: •javascript之对象.面向对象 •可能对于高级语言你可能了解甚至精通OOP面向对象,那么对于javascript你又熟悉多少呢?我们一起来学习javascript面向对象,这样非常有帮助我们理解Ext的基础架构,Ext本身就是一个JS面向对象的框架. •使用json对象(JavaScript Object Notation) –JS对象的特性 –对于js来说json对象非常的重要,我们要学会如何操作json对象 •面向对象的概念 –如何定义一个类.如何实例化对象.

JavaScript事件代理入门

事件代理(Event Delegation),又称之为事件委托.是 JavaScript 中常用绑定事件的常用技巧. 顾名思义,"事件代理"即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务. 为什么要这样做呢? 众所周知,DOM操作是十分消耗性能的.所以重复的事件绑定简直是性能杀手.而事件代理的核心思想,就是通过尽量少的绑定,去监听尽量多的事件. 下面将会用 Zepto 为大家演示怎么实现事件代理. 啊?Zepto是什么? Zepto is a minimalist J

JavaScript事件---事件入门

原文:JavaScript事件---事件入门 内容提纲: 1.事件介绍 2.内联模型 3.脚本模型 4.事件处理函数 JavaScript事件是由访问Web页面的用户引起的一系列操作,例如:用户点击.当用户执行某些操作的时候,再去执行一系列代码.   一.事件介绍 事件一般是用于浏览器和用户操作进行交互的.最早是IE和Netscape Navigator中出现,作为分担服务器端运算负载的一种手段.直到几乎所有的浏览器都支持事件处理.而DOM2级规范开始尝试以一种复合逻辑的方式标准化DOM事件.I

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

本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对象只能通过特定的接口访问,这也是面向接口编程思想的一部分. 封装是面向对象编程里非常重要的一部分,让我们来看看没有封装的代码是什么样的: 1 function Dog(){ 2 this.hairColor = '白色';//string 3 this.breed = '贵宾';//string 4 this

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

一看就懂的Android APP开发入门教程 作者: 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 标准模板库(STL)提供三种类型的组件:容器.迭代器和算法,他们都支持泛型程序设计标准. 容器主要有两类:顺序容器和关联容器.顺序容器(vector.list.deque和string等)是一系列元素的有序集合.关联容器(set.multiset.map和multimap)包含查找元素的键值. 迭代器的作用是遍历容器. STL算法库包含四类算法:排序算法.不可变序算法.变序性算法

JavaScript(1) -- JS入门

1.   JavaScript介绍 JavaScript是属于HTML与Web的解释性编程语言,也是一种以函数优先的弱类型轻量级的脚本语言,无需进行预编译即可与HTML前端页面进行行为交互,支持跨平台运行,可在多种平台下(如Windows.Linux.Mac.Android.iOS等).目前JavaScript被广泛地应用于Web前端Html实现页面交互.实现浏览器页面事件响应.前端数据验证.检验访客浏览器信息.控制cookies的创建与修改.基于Node.js技术进行服务器端编程. 2.  

2016校招真题编程-懂二进制

题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 解题思路:异或,除二取余 源代码: package SuperHakceMainPackage; import java.util.Scanner; public class SuperHakceMian { int countBitDiff(int n,int m){ return n ^ m; } int findN