手记

1.1变量提升,作用域生成和链,函数的生命周期,自定义函数,声明变量重复

1.变量的提升:
在当前的作用域中,在代码中会给var function 重新定义;变量声明加定义;
声明:declare给作用域声明一个变量
定义:defined给变量赋值;
var 和function 区别
var:只声明; function声明+定义;
var m = 10;
function sum ( ){
var n =10;// 在全局作用域中,n不会进行预解释,sum函数没有执行之前 ;sum是还是存在空间里面的一个字符串格式;
}
2.函数执行的步骤:(函数执行的生命周期)--------------------------
函数执行,形成一个私有的作用域,
形参赋值,变量提升预解释,var ,function, 代码从上到下执行;
关于作用域的释放问题;
3.在私有作用域中:(闭包)
函数执行,形成了私有的作用域,保护里面的参数,保护与全局中的变量产生冲突,防止了全局变量的污染,这种把这种机制叫做闭包;
形参变量,提前声明的变量和函数,都是私有变量;
4.作用域链;
在当前作用域中,我们有一个变量不是当前作用域中的私有变量,我们就是向上一级一直查找,一直找到window,如果还没有找到就是undefined;

  1. 带var 和不带var的区别,m没有进行预解释,n在全局作用域中进行预解释;区别不带var的变量不能再变量提升前面输出,会报错
    // console.log(n) undefined
    // console.log(m) 代码报错
    var n= 13;
    m=14;
    6.在全局作用域中,不管条件是否成立,进行声明不定义;
    在全局作用域不管条件是否成立,我们都会进行预解释只声明不定义 ,var function,只声明不定义

7.自定义函数格式:
;(function () {})();
~function () {}();
+function () {}();
!function () {}();
-function () {}();

8.声明变量重复:
(1)不管函数名,还是变量名,都可以叫变量名,都是window的属性,在对象中,不可能用重复属性名,
(2)在变量提升阶段,变量名已经声明过,我们不需要再重复声明;(但是我们的函数可以定义)只等代码执行进行赋值;

9.函数表达式
var fn = function (){ };
事件模拟:document.body.onclick();模拟点击事件,把函数默认执行;

//如果我们想用私有作用域中里面的变量有两种方法 return widow
~function sum (){
function fn () {}
return {fn:fn} ----第一种我们利用对象的好处,就是能返回很多变量;
widow.fn -----第二种,设置成全局变量;
}
10.查找当前作用域的上级作用域:
要看当前作用域在哪里创建的,那么他的上级作用域就在哪里;

1人推荐
随时随地看视频
慕课网APP