作用域
在JavaScript中有两种作用域类型:
- 全局作用域
- 局部作用域(函数作用域)
没有对象作用域
作用域嵌套与作用域链
当一个函数嵌套在另一个函数中,就发生了作用域嵌套。
查询规则:
- JS引擎从当前的执行作用域开始查找变量
- 如果没找到,在外层嵌套的作用域中查找
- 一直向外层查找,直到找到该变量
- 抵达最外层全局作用域还没找到, ReferenceError 异常
function text() {
console.log(a); //a is not defined
}
add(); //报错
词法作用域(静态作用域)
- 词法作用域就是定义词法阶段的作用域,简单说就是函数的作用域在函数定义的时候就决定了。
- 词法作用域查找规则是:作用域查找是从内到外进行查找的,直到找到第一个匹配的标识符时停止
IIFE
let add = (function(){
let count = 0;
return function(){
count++;
console.log(count);
}
})();//分号很重要
add();//1
add();//2
add();//3
回调
概念:
//把一个函数做参数传给另一给函数
function out(in){
in&&in();
}
function in (){
/*code*/
}
let arr = [1,55,4,66,2,88,77,62,45];
let obj = {};
Array.prototype.newForEach = function(callback){
let that = arguments[1] || window;
//this指向Array实例化对象
for(let i = 0,len = this.length;i<len;i++){
//回调函数调用
//callback();
callback.apply(that,[this[i],i,this);
}
}
arr.newForEach(function(value,index,arr){
console.log(this);
console.log(value,index,arr);
},obj)