js细节
1.所有的全局变量都是window的属性.
语句 var a=1;
等价于 window.a=1;
用 "变量名称" in window 来验证全局变量是否声明.
2.所有的变量声明都在范围作用域的顶部.
alert("a" in window);
var a;
尽管a的声明在 alert 之后,alert弹出的依然是true;
这是因为javascript引擎首先会扫描所有的全局变量声明,
然后将这些变量声明移动到顶部,最终的代码效果是这样的:
var a;
alert("a" in window);
3.函数声明 和 变量声明 在进入执行上下文就完成了.
变量声明:
var a;
函数声明:
function functionName(arg1,arg2){
//函数体
}
变量赋值:
var a;--变量声明
a=1;--变量赋值
函数表达式:(匿名函数赋值给变量)======>函数表达式 相当于 变量赋值
var functionName=function(arg1,arg2){
//函数体
}
拆解:
var functionName;
functionName=function(arg1,arg2){
//函数体
}
优先级:函数声明 会覆盖 变量声明,但不会覆盖 变量赋值
4.this 变量:永远指向函数运行时所在的对象,
而不是函数被创建时所在的对象。
如果处在匿名函数中、或者不处于任何对象中,
this 都指向宿主的根对象(在浏览器里面就是 window)
javascript中还用 call() 和 apply() 来调用函数,
再记住下面这两句话:
如果是call()、apply()、with(),指定的this是谁,就是谁 !
普通的函数调用,函数被谁调用,this就是谁。