版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a5252145/article/details/83215259
前提:
1.函数想要执行,就必须知道自身变量以及自身变量所在作用域中的位置。
2.函数的运行取决于函数定义时所在的作用域,不取决于调用时的作用域。
3.函数在作用域链中的变量访问遵循向上查找。
(一)所谓作用域:变量的作用范围。
1.在全局声明的变量具有全局作用域。
2.在函数内声明的变量具有局部作用于。
(二)变量提升:在程序编译阶段,作用域内的变量会被提升到当前作用域的顶部,且声明变量不赋值。
(三)闭包:函数保存自身变量和所在作用域链的位置的现象。
(四)递归:函数调用自身的编程技巧。
死递归:
function foo(){
foo();
}
foo();
前提:
a.递归规律
b.递归出口条件
c.递归的规律趋近于出口条件
var a = 5;
function fn(){
alert(a); //变量提升(也就是a=10提升到了fn最上面)且声明变量不赋值,为undefined
var a = 10;
alert(a); //10
}
fn();
alert(a); //变量作用域 5
输出结果:undefined 10 5