单线程
解释性语言
js三部曲
语法分析
预编译
解释执行
预编译
预编译发生在函数执行的前一刻
函数声明整体提升
变量 声明提升
详细:
imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有.
function test(){
var a=b=123;
console.log(window.b)
}
a=10;
---->window.a=10;
一切声明的全局变量,全是window的属性
那么window是干什么的?
window就是全局的域
var a=123;
全局变量首次放到电脑磁盘里面就是window
如果你要访问之前定义的a的时候他会先去window里面找a
其实就是
var a=123;
console.log(a)--->window.a其实就是访问的window.a
window里面是全局变量没有局部变量!
四部曲
1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一
4.在函数体里面找到函数声明,值赋予函数体(不是函数表达式)
全局的预编译是GO===window
练习
// GO{
// global:100;
// }
global=100;
function fn(){
console.log(global)//undfind
global=200;
console.log(global)//200
var global=300;
}
fn();
var global;
// AO{
// global : undfind
// }
2
// GO{
// foo:function;
// }
function bar(){
return foo;
foo=10;
function foo(){
}
var foo=11;
}
console.log(bar());
// AO{
// global : undfind
// }
3
// GO{
// foo:10;
// }
console.log(bar());
function bar(){
foo=10;
function foo(){
};
var foo=11;
return foo;
}
// AO{
// foo : 11
// }
(window.foo||(window.foo='bar'))
先看小括号再看||
//一旦经历了var 的操作,所得出的属性,window,这种属性叫做不可配置的属性
//不可配置的属性 delete不掉
网友评论