变量提升
var f = 1;
function bar(){
f = 10;
function f(){
}
}
bar();
alert(f);
顺序:1、提升bar,提升f
2、f = 1
3、bar函数执行,创建闭包
3.1、提升函数f
3.2、给函数f赋值了10
3.3、函数执行完毕,闭包空间销毁
4、alert(f) 弹出1
JS执行过程
1. 先提升(先提升函数,再提升变量,如果名字一样,变量提升会覆盖函数提升)
2. 再执行,如果遇到闭包创建
3. 在闭包空间中反复1和2
4. 先定义(提升),在执行
5. 变量提升
6. 函数提升
问题提出
function change() {
alert(typeof fn);
function fn() {
}
var fn
}
change()
为什么不是undefined?
在js中函数的声明 比变量优先级要高
并且定义过程不会被变量覆盖 除非是赋值
你的代码相当于
function change() {
function fn(){}
var fn;
alert(typeof fn) // function 不会被覆盖
fn=1;
alert(typeof fn) // 1 会覆盖
}
change()
数组和对象的区别
var arr = [ , , , , ,];
var obj = {
xxx :xxx,
xxx :xxx
}
注意 obj.xxx
和 obj[xxx]
的区别
第一种是规定obj必须得有那个属性,不可改变
第二种可以动态添加属性,通过字符串的方式