<script>
"use strict"
//函数作用域
function func(){
var arr = [1,3,5,7,9];
var sum = 0;
for(var i = 0,len = arr.length;i < len;i ++){
sum += arr[i];
}
console.log("%d\t\n%d",i,sum);
}
func();
//
// //闭包特性
var outter = [];
function clouseTest(){
var arr = ["one","two","three","four"];
for(var i = 0, len = arr.length;i < len;i ++){
var x = {};
x.no = i;
x.text = arr[i];
x.invoke = function(){
console.log("%d\t\n%o\t\n%d\t\n",i,this,this.no);
};
outter.push(x);
}
} clouseTest();
for(var i = outter.length - 1;i >= 0;i --){
outter[i].invoke();
}
//
//Object { no=3, text="four", invoke=function()}
// //
//Object { no=2, text="three", invoke=function()}
// //
//Object { no=1, text="two", invoke=function()}
// //
//Object { no=0, text="one", invoke=function()}
// //关于i输出的都是4的解释:因为,在每次迭代的时候这样的语句x.invoke=function(){console("%d",i);}并没有
//被执行,只是构建了一个函数体为“console.log("%d",i);”的函数对象,如此而已。而当i = 4时,迭代停止,外部函数返回
//当再去调用outter[i].invoke()时,i的值依旧为4,因此outter数组中的每一个元素的invoke都返回i的值为4. //引用
var obj = {};//空对象
var ref = obj;//引用
obj.name = "objectA";//
console.log(ref.name);//ref跟着刚添加的name属性
obj = ["one","two","three","four"];//obj指向了另一个对象(数组对象)
console.log(ref.name);//ref还指向原来的对象
console.log(obj.length);//
console.log(ref.length);//undefined //objectA
//objectA
//
//undefined //作用域问题:内部函数可以访问外部函数中的变量,(在非严格模式下,当此时内部函数中的this却是指向window)
var name = "window";
function wrapper(){
var name = "wrapper"; function inner(){
console.log('%s',name);//wrapper
console.log('%o',this);//在严格模式( use strict)下是 undefined,否则指向 window
//console.log('%s',this.name);//在严格模式(use strict)下,是undefined error,否则是 'window'
}
inner();
}
wrapper(); function wrapper2(){
var name = "local";
return function(){
console.log('%s',name);//local
console.log('%o',this);//在严格模式( use strict)下是 undefined,否则指向 window
//console.log('%s',this.name);//在严格模式(use strict)下,是undefined error,否则是 'window'
};
} wrapper2()(); </script>

JS作用域与闭包--实例的更多相关文章

  1. JS作用域与闭包

    JS作用域与闭包 在JavaScript中,作用域是可访问变量,对象,函数的集合. 变量分为全局变量和局部变量.全局变量在函数外定义,HTML中全局变量是window对象,所有数据对象都属于windo ...

  2. js——作用域和闭包

    1. js是编译语言,但是它不是提前编译,编译结果不能在分布式系统中移植.大部分情况下,js的编译发生在代码执行前的几微秒(甚至更短) 2. 一般的编译步骤   分词/词法分析:把字符串分解成词法单元 ...

  3. js作用域及闭包

    作用域 执行环境是js最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为. 1.全局执行环境就是最外围的一个执行环境,每一个函数都有自己的作用域 2.简单的说局部作用 ...

  4. js基础(闭包实例)

    1,常用发送短信的闭包实现: function sms() { var count = 60; return { start: function() { if(count == 0) { count ...

  5. 浅谈JS作用域和闭包

    函数表达式和函数声明 变量/函数声明都会提前 console.log(a) let a =1 那么打印出来的a为 undefined,因为会将a提到前面并赋予默认值undefined 函数声明:函数声 ...

  6. JS教程:词法作用域和闭包 (网络资源)

    varclassA = function(){ ; } classA.prototype.func1 = function(){ var that = this, ; function a(){ re ...

  7. js 作用域,作用域链,闭包

    什么是作用域? 作用域是一种规则,在代码编译阶段就确定了,规定了变量与函数的可被访问的范围.全局变量拥有全局作用域,局部变量则拥有局部作用域. js是一种没有块级作用域的语言(包括if.for等语句的 ...

  8. 解析js中作用域、闭包——从一道经典的面试题开始

    如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎 ...

  9. 你不知道的JS之作用域和闭包(五)作用域闭包

    原文:你不知道的js系列 一个简单粗暴的定义 闭包就是即使一个函数在它所在的词法作用域外部被执行,这个函数依然可以访问这个作用域. 比如: function foo() { var a = 2; fu ...

随机推荐

  1. OC2-重写

    // // Dog.h // OC2-重写 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rig ...

  2. OpenGL7-1-快速绘制接口(使用高效的函数接口进行绘制)

    代码下载 #include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include & ...

  3. HMTL笔记——Iframe

    1.以iframe 引入的银行支付界面 不能够弹出插件,但是用户安装了插件才能够去支付. 2.以Iframe引入的页面在引入的界面中的跳转都只能在当前Iframe中完成,如果想要跳出则需要window ...

  4. 抛弃 CSS Hacks 后的浏览器兼容方案

    一般情况下的浏览器兼容需要考虑 IE6/7/8 三种 IE 版本,当然在 IE9 开始逐步推向市场后,又会有更多的衍生版本.所以我目前只考虑 IE7~9 版本的兼容情况.涉及到的条件注释代码如下: & ...

  5. iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存

    iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...

  6. 深度优先算法DFS

    英雄要从H点出发,去解救位于M点的美女. 迷宫的围墙用#表示,带*号的位置表示有杀手埋伏,这些点都是不能走的, 那么英雄要最少走多少步才能解救美女呢? package myalgorithm; imp ...

  7. [DevExpress]GridControl 列头绘制Checkbox

    关键代码: /// <summary> /// 为列头绘制CheckBox /// </summary> /// <param name="view" ...

  8. ZENCART 打开/关闭日志文件

    优秀的php开源程序很多都只带生成日志文件的功能,这类功能的开发可以帮助到站长在调试网站的时候及时的改正网站存在的错误,但是这类错误日志由来并非网站出现什么严重不可挽救的错误,大部分是一些未定义变量这 ...

  9. PHP随机生成广告图片的实例 代码

    PHP随机生成广告图片: <?php /*  +------------------------------------------------------------------+  | Mi ...

  10. AvalonDock 2.0 的简单运用

    最近在研究AvalonDock的一些使用,碰到了一些问题.现在拿出来跟大家分享分享. 网上找了一大把AvalonDock 1.3版本的资料,弄出Demo后发现属性面板(DockableContent) ...