JS---Tom大叔五道题&&其他博客、帖子梳理
2017-07-19 10:09
218 查看
http://www.cnblogs.com/TomXu/archive/2012/02/09/2330578.html
Tom大叔,5道题目
1.
等价于:
①所有全局变量都window的属性,var a=1;等价于window.a=1;
②检验全局变量是否声明的方法:”变量名称” in window
③所有的变量声明都在范围作用域的顶部。
④var a=1;包括了变量声明和变量赋值。——
var a;//声明
a=1;//初始化赋值
2.
等价于
Analysis:该题中,变量a声明并初始化赋值为1,同时有个同名的函数,并将其保存在变量b中,此时函数a被变量a所覆盖,因此alert(a)为1。
①变量声明在进入执行上下文就完成了。(var a)
②函数声明也是提前的,所有的函数声明都在执行代码之前就已经完成了声明。
③函数声明会覆盖变量声明,但不会覆盖变量赋值。
3.
①当变量和函数同名时,在变量没有赋值的情况下,同名变量被覆盖掉。
②当变量和函数同名时,如果变量初始化赋值了,那么同名函数被覆盖掉。
4.
①活动对象是进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。
②arguments属性的值是Arguments对象。
③Arguments对象是活动对象的一个属性,包括如下属性:
a)callee—-指向当前函数的引用。
b)length—真正传递的参数个数。
c)properties-indexes(字符串类型的整数)属性的值就是函数的参数值(按参数列表从左向右排列),properties-indexes内部元素的个数等于arguments.length。properties-indexes的值和实际传递进来的参数之间是”共享”的。
④这个”共享”其实并不是真正意义上的共享同一个内存地址,而是两个不同的内存地址,使用JS引擎来保证这两个值是时刻保持一样的,这需要一个前提—-该索引值要小于你传入参数的个数。
5.
等价于
①this值是如何定义的:当一个方法在对象上调用的时候,this就指向了该对象。object.method();
②如果一个函数的定义不是属于一个对象属性的时候(也就是单独定义的函数),该函数内部的this等价于window的。
6.this
①this是一个与执行上下文相关的特殊对象。因此,可以称作上下文对象(用来指明执行上下文是哪个上下文中所触发的对象)。
②this是执行上下文的一个属性,而不是变量对象的一个属性。
zeromike的深入分析:
https://www.zhihu.com/question/36751764
7.变量对象是一个与执行上下文相关的特别对象,主要存储:①声明的变量 ②函数声明 ③在上下文中,函数声明的形式参数。
8.[[scope]]是在函数创建的时候被保存起来的—静态的(不变的),直至该函数被销毁。
https://segmentfault.com/q/1010000005839904
9.函数其实就是一个对象,在这个对象里保存了如下的值:函数形参的名字,当前执行环境,函数体的代码。
①形参的名字就是一个字符串数组。
②函数体代码也就是个字符串。
10.函数定义就是一段代码,执行到这段代码之前,这个函数是”抽象”的存在。
11.实际的执行环境实在函数调用的时候创建的。
Tom大叔,5道题目
1.
if (!("a" in window)) { var a = 1; } a;//undefined
等价于:
var a; if(!('a' in window)){ a=1; } a;//undefined
①所有全局变量都window的属性,var a=1;等价于window.a=1;
②检验全局变量是否声明的方法:”变量名称” in window
③所有的变量声明都在范围作用域的顶部。
④var a=1;包括了变量声明和变量赋值。——
var a;//声明
a=1;//初始化赋值
2.
var a = 1, b = function a(x) { x && a(--x); }; alert(a);//1
等价于
var a = 1, b = functin(x){ x && b(--x); }; alert(a);//1
Analysis:该题中,变量a声明并初始化赋值为1,同时有个同名的函数,并将其保存在变量b中,此时函数a被变量a所覆盖,因此alert(a)为1。
①变量声明在进入执行上下文就完成了。(var a)
②函数声明也是提前的,所有的函数声明都在执行代码之前就已经完成了声明。
③函数声明会覆盖变量声明,但不会覆盖变量赋值。
//在同名变量没有赋值的情况下,同名函数的优先级大于同名变量,因此覆而盖之 function value(){ return 1; } var value; typeof(value);//"function" //变量value赋值了,那就不一样了 function value(){ return 1; } var value=2; typeof(value);//number
3.
function a(x) { return x * 2; } var a; alert(a);//函数a
①当变量和函数同名时,在变量没有赋值的情况下,同名变量被覆盖掉。
②当变量和函数同名时,如果变量初始化赋值了,那么同名函数被覆盖掉。
4.
function b(x, y, a) { arguments[2] = 10; alert(a);//10 } b(1, 2, 3);
①活动对象是进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。
②arguments属性的值是Arguments对象。
③Arguments对象是活动对象的一个属性,包括如下属性:
a)callee—-指向当前函数的引用。
b)length—真正传递的参数个数。
c)properties-indexes(字符串类型的整数)属性的值就是函数的参数值(按参数列表从左向右排列),properties-indexes内部元素的个数等于arguments.length。properties-indexes的值和实际传递进来的参数之间是”共享”的。
④这个”共享”其实并不是真正意义上的共享同一个内存地址,而是两个不同的内存地址,使用JS引擎来保证这两个值是时刻保持一样的,这需要一个前提—-该索引值要小于你传入参数的个数。
function b(x,y,a){ arguments[2]=10; console.log(a);//undefined } b(1,2);
5.
function a() { alert(this);//[object,Window] } a.call(null);
等价于
//null/undefined 作为第一个参数均转化为全局对象(window) function a(){ alert(this);//[object Window] } a.call(window); function a(){ alert(this===window);//true } a.call(window);
①this值是如何定义的:当一个方法在对象上调用的时候,this就指向了该对象。object.method();
var object={ method:function(){ alert(this===object);//ture } } object.method();
②如果一个函数的定义不是属于一个对象属性的时候(也就是单独定义的函数),该函数内部的this等价于window的。
function method2(){ alert(this===window);//true } method2();
6.this
①this是一个与执行上下文相关的特殊对象。因此,可以称作上下文对象(用来指明执行上下文是哪个上下文中所触发的对象)。
②this是执行上下文的一个属性,而不是变量对象的一个属性。
zeromike的深入分析:
https://www.zhihu.com/question/36751764
7.变量对象是一个与执行上下文相关的特别对象,主要存储:①声明的变量 ②函数声明 ③在上下文中,函数声明的形式参数。
8.[[scope]]是在函数创建的时候被保存起来的—静态的(不变的),直至该函数被销毁。
https://segmentfault.com/q/1010000005839904
9.函数其实就是一个对象,在这个对象里保存了如下的值:函数形参的名字,当前执行环境,函数体的代码。
①形参的名字就是一个字符串数组。
②函数体代码也就是个字符串。
10.函数定义就是一段代码,执行到这段代码之前,这个函数是”抽象”的存在。
11.实际的执行环境实在函数调用的时候创建的。
相关文章推荐
- js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1
- JS基础知识梳理--setTimeout()&setInterval()
- js执行上下文补充 变量对象 (看汤姆大叔博客所记)
- js "include"其他js / css 文件
- js变量声明与赋值---看汤姆大叔博客所做笔记(一)
- 【Todo】React & Nodejs学习 &事件驱动,非阻塞IO & JS知识栈:Node为主,JQuery为辅,Bootstrap & React为辅辅,其他如Angular了解用途即可
- JS刷新框架中的其他页面&&JS刷新窗口方法汇总
- constraints添加工具&&其他有用博客
- nodejs&npm等概念梳理
- 最近同事推荐Tom大叔的JS文章
- JS刷新框架中的其他页面&&JS刷新窗口方法汇总
- node.js&mongodb&express 搭建个人博客系统
- php+js+mysql设计的仿webQQ-<2>其他验证
- js便签笔记(12)——浏览TOM大叔博客的学习笔记 part2
- javascript - 浏览TOM大叔博客的学习笔记
- 浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
- "怎样给博客帖子加内部链接"
- javascript - 浏览TOM大叔博客的学习笔记
- JS数据类型&&typeof&&其他
- Ubuntu14.04LTS下安装Node.js&NPM以及个人博客hexo的初始化配置