js 中作用域、闭包的总结
2017-12-06 10:28
148 查看
前言:作用域是js中一个非常基础的知识,也是前端面试题喜欢考察的地方。同时理解作用域也是使用闭包的一个前提。
没有在函数体里面声明的变量都是全局的
没有使用var 声明的变量都是全局的
2、然后我们要明白:作用域查找时,是查找定义时的作用域,而不是运行时的作用域
3、this的使用,this和作用域有着很大的不同:this指向的是调用时的对象,而不是定义时的对象;
类似call的函数还要apply、bind
apply的用法和call差不多,这里介绍一下bind的用法
4、现在了解上面的知识之后,我们开始讲闭包;
闭包:就是一个函数内部的那个函数,可以在外部用来访问函数内部数据,防止数据被污染(阮一峰的解释为:闭包就是能够读取其他函数内部变量的函数。)
eg:写一个函数判断数据是否是第一次出现
理解闭包之后,我们再讲闭包的使用场景
作为函数返回
作为函数传参
作用域的理解
1、首先要理解js中没有块级作用域,js只有全局作用域和函数作用域;没有在函数体里面声明的变量都是全局的
没有使用var 声明的变量都是全局的
2、然后我们要明白:作用域查找时,是查找定义时的作用域,而不是运行时的作用域
var a=200; function fn(){ var a=100; console.log('fn',a); } console.log('global',a);//200 fn();//100
3、this的使用,this和作用域有着很大的不同:this指向的是调用时的对象,而不是定义时的对象;
var wang={ name : "对象内部", fn : function fn(){ console.log(this.name); } }; wang.fn();//对象内部 //使用call改变其作用域,使this指向call里面的对象 wang.fn.call({name:"改变作用域"});
类似call的函数还要apply、bind
apply的用法和call差不多,这里介绍一下bind的用法
var fn2=function(name){ alert(name); console.log(this); }.bind({y:200}); //bind(obj)这个方法,将this转变为指向obj 即this=obj fn2('zhangsan');
4、现在了解上面的知识之后,我们开始讲闭包;
闭包:就是一个函数内部的那个函数,可以在外部用来访问函数内部数据,防止数据被污染(阮一峰的解释为:闭包就是能够读取其他函数内部变量的函数。)
eg:写一个函数判断数据是否是第一次出现
function isFirstLoad() { var _list=[];//将数组定义在内部,可以有效的避免数据的污染 return function(id){ if(_list.indexOf(id) === -1){ _list.push(id); console.log(_list); return true; }else{ return false; } } } var FirstLoad=isFirstLoad(); console.log(FirstLoad(10));//true console.log(FirstLoad(10));//false console.log(FirstLoad(20));//true console.log(FirstLoad(20));//fasle
理解闭包之后,我们再讲闭包的使用场景
作为函数返回
function F1(){ var a=100; return function(){ console.log(a); } } var f1=F1() var a=200; f1();//100
作为函数传参
function F1(){ var a=100; return function(){ console.log(a); } } var f1=F1() function F2(fn){ var a=200; fn(); } F2(f1)//100
相关文章推荐
- 详解JS的作用域和闭包
- js的作用域、作用域链、闭包
- js中作用域与函数闭包
- JS中的作用域和闭包
- JS中的作用域与闭包:this,var,(function () {})
- 变量的作用域--js闭包
- JS变量作用域、闭包
- js 作用域,闭包及其相关知识的总结
- js闭包实现块级作用域和私有变量的访问
- js中作用域和闭包
- JavaScript的变量作用域及闭包总结
- js变量作用域,闭包。
- JavaScript作用域、闭包、对象与原型链概念及用法实例总结
- JS之闭包总结学习
- 关于JS解析机制、作用域的一些总结
- JavaScript学习记录总结(六)——js函数闭包特性
- Js变量作用域闭包
- 关于JS中作用域的销毁和不销毁的情况总结
- 关于JS变量的作用域,作用域链与闭包
- js(三)---函数的作用域与闭包