js中作用域与函数闭包
2018-03-06 17:38
218 查看
1.作用域很简单,只是简单的点一下,js的作用域没有块级作用域,只有全局作用域与函数作用域;
例如:if(true){
var a=100;
}
console.log(a);在java或者c中大括号就是块外边是获取不到的,但是在js中是可以的,就相当于
var a;
if(true){
a=100;
}
这里的a就是全局作用域;凡是在函数外定义的变量都是全局作用域。
特例:function Loga(){
a=100
}
console.log(a);这里的a也是可以获取到的,当在函数内部不带var 就直接声明变量时也是把父作用域当作作用域,但是不建议这么写,一般需要声明定义。
对于函数作用域通过字面理解就是定义在函数内部的变量就是在函数内部起作用;
函数作用域与全局作用域的区别是,函数作用域内可以调用全局作用域的变量并进行修改,但是全局作用域不能调用函数作用域内定义的变量,这里定义很关键(是不是修改),这里涉及到作用域链,就是变量依次可以访问父级作用域的变量,通俗讲就是从内向外可以访问但是从外向内是不可以访问的。
2.闭包
闭包的概念没有一个确切的说法,下面来说一下闭包的使用场景
a.函数作为返回值;
b.函数作为参数传递
例子: function F1(){
var a=100
return function(){
console.log(a);//a是自由变量
}
}
var a=200;
var f=F1();
f();
这是一个典型的闭包案例,返回值f为一个函数,执行环境是全局,但是生成环境是在F1中,这里函数的作用域就是F1,所以输出就是100;这里的a是自由变量,要去父作用域查找,就是F1.
第二中情况,函数作为参数传递 function F1(){
var a=100
return function(){
console.log(a);
}
}
var a=200;
var f=F1();
function F2(fn){
var a=300;
fn();
}
F2(f);
很显然结果是一样的,理由同上,执行环境是F2,但是生成环境是F1,父作用域是F1,所以输出仍为100.
4000
例如:if(true){
var a=100;
}
console.log(a);在java或者c中大括号就是块外边是获取不到的,但是在js中是可以的,就相当于
var a;
if(true){
a=100;
}
这里的a就是全局作用域;凡是在函数外定义的变量都是全局作用域。
特例:function Loga(){
a=100
}
console.log(a);这里的a也是可以获取到的,当在函数内部不带var 就直接声明变量时也是把父作用域当作作用域,但是不建议这么写,一般需要声明定义。
对于函数作用域通过字面理解就是定义在函数内部的变量就是在函数内部起作用;
函数作用域与全局作用域的区别是,函数作用域内可以调用全局作用域的变量并进行修改,但是全局作用域不能调用函数作用域内定义的变量,这里定义很关键(是不是修改),这里涉及到作用域链,就是变量依次可以访问父级作用域的变量,通俗讲就是从内向外可以访问但是从外向内是不可以访问的。
2.闭包
闭包的概念没有一个确切的说法,下面来说一下闭包的使用场景
a.函数作为返回值;
b.函数作为参数传递
例子: function F1(){
var a=100
return function(){
console.log(a);//a是自由变量
}
}
var a=200;
var f=F1();
f();
这是一个典型的闭包案例,返回值f为一个函数,执行环境是全局,但是生成环境是在F1中,这里函数的作用域就是F1,所以输出就是100;这里的a是自由变量,要去父作用域查找,就是F1.
第二中情况,函数作为参数传递 function F1(){
var a=100
return function(){
console.log(a);
}
}
var a=200;
var f=F1();
function F2(fn){
var a=300;
fn();
}
F2(f);
很显然结果是一样的,理由同上,执行环境是F2,但是生成环境是F1,父作用域是F1,所以输出仍为100.
4000
相关文章推荐
- js加强:js引擎,变量作用域,arguments对象,特殊函数,闭包
- JavaScript高级程序设计(第2版) 学习笔记:(二)js函数作用域与闭包
- js(三)---函数的作用域与闭包
- JS笔记--探讨闭包中内部函数在各情况下的可访问范围
- 8.8: 函数作用域和闭包(*)
- 一切皆对象之两个方法概括js,无函数签名(无多态),原型,闭包,封装,引用类型,继承……
- JS中的作用域与闭包:this,var,(function () {})
- js函数4-闭包
- js高级函数之闭包
- JS:函数的记忆功能(闭包)
- js 函数闭包内部返回函数体调用方法难点解答
- [javascript]js函数的几种写法 闭包概要
- JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】
- JS中闭包、函数与对象的介绍和用法
- js 中闭包和立即执行函数
- Python学习(21):Python函数(5):变量作用域与闭包
- Js函数深入理解-闭包中的this
- 深入理解Javascript 函数作用域 闭包
- js 函数作用域之声明提前
- js中函数的作用域