题目1
/*全局(window)域下的一段代码*/
function a(i) {
var i;
alert(i);
};
a(10);
/*
输出结果是: 10
分析:
a 函数有一个形参 i,调用 a 函数时传入实参 10,形参 i=10
接着定义一个同名的局部变量 i,未赋值
alert 输出 10
*/
题目2
function a(i) {
alert(i);
alert(arguments[0]);
var i = 2;
alert(i);
alert(arguments[0]);
};
a(10);
/*
输出结果: 10,10,2,2
分析:
a 函数有一个形参i,调用 a 函数时传入实参 10,形参 i=10
第一个 alert 把形参 i 的值 10 输出
第二个 alert 把 arguments[0] 输出,应该也是 i
接着定义个局部变量 i 并赋值为2,这时候局部变量 i=2
第三个 alert 就把局部变量 i 的值 2 输出
第四个alert再次把 arguments[0] 输出
*/
题目3
/*全局(window)域下的一段代码*/
var i=10;
function a() {
alert(i);
var i = 2;
alert(i);
};
a();
/*
输出结果: undefined,2
分析: js的预定义功能
*/
题目5
var i=10;
function a() {
alert(i);
function b(){
var i = 2;
alert(i);
}
b();
};
a();
/*
输出结果: 10,2
分析:
i的定义对于a来说,b定义的i是是私有的(比喻),
a在查找变量a时候是一级级向上查找的,不会向下查找
*/
题目6
var scope = "global scope";
function checkscope(){
var scope = "local scope";
function f(){
return scope;
}
return f();
}
checkscope();
function checkscope2(){
var scope = "local scope";
function f(){
return scope;
}
return f;
}
checkscope2()();
/*
输出结果: local scope,local scope
分析:
checkscope(); 局部变量作用于在函数里面都是通用的,
checkscope2()(); f()依旧是绑定checkscope2(),checkscope2一样是存在
*/
题目7
// 数据统计1
var uniqueInteger = (function(){
var counter = 0;
return function(){
return counter++;
}
}());
uniqueInteger();//0
// 数据统计2 通过对象
function counter(){
var n = 0;
return {
count:function(){ return n++},
reset:function(){ n=0;}
};
}
var c = counter();
var d = counter();
c.count();//0
d.count();//0
c.reset();//
c.count();//0
d.count();//1
/*
1.两个方法都可以访问私有变量n
2.每次调用counter()都会创建一个
新的作用域链和一个新的私有变量
*/
题目8
function constfunc(v){
return function(){
return v;
};
}
var funcs = [];
for(var i = 0;i<10;i++){
funcs[i] = constfunc(i);
}
funcs[5]();//值是多少?
function constfunc(){
var funcs = [];
for(var i = 0;i<10;i++){
funcs[i] = function(){return i;};
}
return funcs;
}
var funcs = constfunc();
funcs[5]();// 值是多少?
/*
结果: 5,10
分析: 第一个funcs中的每个function都是new新的constfunc,处于不同的闭包
第二个funcs中的每个function处于同一个闭包中,数据共享,都会返回相同的值
*/
具体可以查看javascript解析过程
http://lingf.iteye.com/blog/1834909
分享到:
相关推荐
20200103-王正正-js的执行顺序和闭包的探究.docx
夯实基础中篇-图解作用域链和闭包.doc
Alamofire - swift 代理请求封装,闭包回调封装
js-闭包 用于理解和演示闭包、Web 套接字和 FP 等概念的小型 js 测试
JavaScript闭包 JavaScript闭包 JavaScript闭包 JavaScript闭包
面向对象概念(对象封装,各种继承,闭包原理,this作用域等)介绍清晰易懂
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C++的程序员来说是一个新的语言特性。本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ...
闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...
本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。
Javascript 闭包完整解释
js代码-1.作用域与闭包 - 代码
深度探讨javascript函数的原型链和闭包
本篇文章主要介绍了js的闭包,闭包算是js里面比较不容易理解的点,现在整理出来分享给大家,有需要的可以了解一下。
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
JavaScript核心技术 简介: 《JavaScript核心技术》对于各种浏览器、浏览器版本、JavaScript版本、DOM版本的介绍,有助于我们理解所遇到的各种新旧代码,使我们能够对这些代码做出正确的取舍。《JavaScript核心技术》...
js代码-异步、作用域、闭包