JS作用域与闭包--实例
<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作用域与闭包--实例的更多相关文章
- JS作用域与闭包
JS作用域与闭包 在JavaScript中,作用域是可访问变量,对象,函数的集合. 变量分为全局变量和局部变量.全局变量在函数外定义,HTML中全局变量是window对象,所有数据对象都属于windo ...
- js——作用域和闭包
1. js是编译语言,但是它不是提前编译,编译结果不能在分布式系统中移植.大部分情况下,js的编译发生在代码执行前的几微秒(甚至更短) 2. 一般的编译步骤 分词/词法分析:把字符串分解成词法单元 ...
- js作用域及闭包
作用域 执行环境是js最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为. 1.全局执行环境就是最外围的一个执行环境,每一个函数都有自己的作用域 2.简单的说局部作用 ...
- js基础(闭包实例)
1,常用发送短信的闭包实现: function sms() { var count = 60; return { start: function() { if(count == 0) { count ...
- 浅谈JS作用域和闭包
函数表达式和函数声明 变量/函数声明都会提前 console.log(a) let a =1 那么打印出来的a为 undefined,因为会将a提到前面并赋予默认值undefined 函数声明:函数声 ...
- JS教程:词法作用域和闭包 (网络资源)
varclassA = function(){ ; } classA.prototype.func1 = function(){ var that = this, ; function a(){ re ...
- js 作用域,作用域链,闭包
什么是作用域? 作用域是一种规则,在代码编译阶段就确定了,规定了变量与函数的可被访问的范围.全局变量拥有全局作用域,局部变量则拥有局部作用域. js是一种没有块级作用域的语言(包括if.for等语句的 ...
- 解析js中作用域、闭包——从一道经典的面试题开始
如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎 ...
- 你不知道的JS之作用域和闭包(五)作用域闭包
原文:你不知道的js系列 一个简单粗暴的定义 闭包就是即使一个函数在它所在的词法作用域外部被执行,这个函数依然可以访问这个作用域. 比如: function foo() { var a = 2; fu ...
随机推荐
- iMAC——全新重装Mac系统
在参考网上重装Mac系统教程的时候,感觉这篇教程挺不错: http://www.iplaysoft.com/osx-yosemite-usb-install-drive.html (此教程终端命令处需 ...
- 选用 get 与 post 的一些建议
1.http的请求方法:get post 2. get:会把请求的内容 放到链接地址里面(数据请求的时候 默认的是get请求) 例:www.baidu.com/user/login?userna ...
- Manifest文件简介
每个Android项目都包含一个Manifest文件-Android Manifest.xml,它存储在项目层次中的最底层.Manifest可以定义应用程序及其组件和需求的结构和元数据. 它包含了组成 ...
- JavaScript之数组对象
Array类型是ECMAScript中最常用的类型了. 一.声明方式 1.使用Array构造函数 var arr1 = new Array(); 如果预先知道要保存数组的数量, 也可以给构造函数传递该 ...
- android xml的生成与解析
Main java package com.itheima.xml; import android.app.Activity; import android.content.Context; impo ...
- XML格式以及相关libxml库学习
本文参考 XML文件格式语法以及DTD,摘除其中自己认为必要的知识点,在此记录如下. 先给出一个xml的实例文件, <?xml version="1.0" encoding= ...
- Unity3D设置字体颜色大小,用于游戏分数显示设置等,
最近在学unity3d,慢慢的学会了许多unity的东西,今天记录下unity3d的Label字体大小及颜色的代码,下面是显示游戏中分数的代码,, public static int Score = ...
- jquery ListBox 左右移动
<head runat="server"> <title>无标题页</title> <script type="text/jav ...
- app配置智能硬件的解决方案
随着越来越多的智能硬件产品上市,越来越多的硬件都戴上了智能的帽子,什么智能插座,智能音箱,智能称等等.凡是所谓的智能,都是通过wifi或者蓝牙来连接互联网,其中蓝牙也只能算是手机的附属品吧.主要还是硬 ...
- Java 多线程 锁 存款 取款
http://jameswxx.iteye.com/blog/806968 最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大概分为这几个主题: ja ...