diff --git "a/07 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-10-28\347\254\224\350\256\260\351\242\204\347\274\226\350\257\221.md" "b/07 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-10-28\347\254\224\350\256\260\351\242\204\347\274\226\350\257\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..4c4e5030fe8f6aa3f4f807aecff2abdc45dbc2aa --- /dev/null +++ "b/07 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-10-28\347\254\224\350\256\260\351\242\204\347\274\226\350\257\221.md" @@ -0,0 +1,14 @@ +​ var:如果在,块级 --> 全局变量 局部作用域(function)-->局部变量 + +​ let:不管在哪,都是局部 + +​ 没有任何声明 a=5,不管在哪,都是全局 + + + +预编译:(function)AO + +1. 开始预编译 查找声明的变量和方法 + 1.1 首先会赋值为undefined (找形参和变量声明,值赋予undefined) + 1.2 查找函数声明 (将形参与实参的值统一 ) ——GO中没有这一步 + 1.3 给函数体赋值 (找函数声明,值赋予函数体) diff --git "a/07 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-10-31\347\254\224\350\256\260\351\227\255\345\214\205.md" "b/07 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-10-31\347\254\224\350\256\260\351\227\255\345\214\205.md" new file mode 100644 index 0000000000000000000000000000000000000000..16c2a9976b917f86fdbf5266199230d8650fccd4 --- /dev/null +++ "b/07 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-10-31\347\254\224\350\256\260\351\227\255\345\214\205.md" @@ -0,0 +1,64 @@ +一、变量的作用域: + +函数内部可以直接读取全局变量。 + +var n=999; + +function f1(){ +alert(n); +} + +f1(); // 999 + +在函数外部无法读取函数内的局部变量 + +function f1(){ +var n=999; +} + +alert(n); // error + +这里有一个地方需要注意, 函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! + +function f1(){ +n=999; + +} + +f1(); + +alert(n); // 999 + +二、如何从外部读取局部变量 + +只有通过变通方法才能实现从外部读取局部变量。那就是在函数的内部,再定义一个函数。 + +function f1(){ + +var n=999; + +function f2(){ +alert(n); // 999 +} + +} + +在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。父对象的所有变量,对子对象都是可见的,反之则不成立。 + +既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗! + +function f1(){ + +var n=999; + +function f2(){ +alert(n); +} + +return f2; + +} + +var result=f1(); + +result(); // 999 \ No newline at end of file