JS---Tom大叔五道题&&其他博客、帖子梳理
来源:互联网 发布:python马踏棋盘算法 编辑:程序博客网 时间:2024/06/03 13:11
http://www.cnblogs.com/TomXu/archive/2012/02/09/2330578.html
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---Tom大叔五道题&&其他博客、帖子梳理
- javascript - 浏览TOM大叔博客的学习笔记
- 汤姆大叔的博客 JS/jQuery
- 汤姆大叔的博客
- 汤姆大叔的博客
- js变量声明与赋值---看汤姆大叔博客所做笔记(一)
- js执行上下文补充 变量对象 (看汤姆大叔博客所记)
- 跟Sam大叔学JS(一)
- 博客梳理成功
- 博客中知识点梳理
- android系统博客梳理
- 其他博客
- 其他博客
- react.js相关帖子
- Tom
- Tom
- 汤姆大叔的博客 javascript 深入理解JavaScript系列
- 深入理解JavaScript系列---转汤姆大叔的博客
- unity初学一
- JavaWeb中的九大内置对象概述
- \Perhaps you are running on a JRE rather than a JDK?
- php 跨域 form提交 2种方法
- Struts---防止表单重复提交Interceptor的一个应用
- JS---Tom大叔五道题&&其他博客、帖子梳理
- Hadoop之Flume框架学习(笔记20)
- 百练_2708:平衡饮食
- TensorFlow版本问题
- SpringMvc文件上传
- 密码输入框(默认六位 [*] [*] [*] [*] [*] [*])
- es模块化基础
- Windows下配置nginx+php(wnmp)
- Android------------全局捕获异常