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 ...
随机推荐
- PHP学习笔记 - 进阶篇(8)
PHP学习笔记 - 进阶篇(8) 日期与时间 取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 0 ...
- (转)Spark安装与学习
摘要:Spark是继Hadoop之后的新一代大数据分布式处理框架,由UC Berkeley的Matei Zaharia主导开发.我只能说是神一样的人物造就的神器,详情请猛击http://www.spa ...
- bzoj1018:[SHOI2008]堵塞的交通traffic
思路:线段树好题,用线段树维护连通性. 区间[l,r]表示左端点为l,右端点为r,宽度为2的矩形,那么线段树区间维护的就是该区间内的四个角的连通情况,注意是该区间内的连通情况,也就是说只能通过该区间内 ...
- InnoDB 离线转储工具
一,应用场景; 1,表空间严重损坏,无法恢复;2,数据库表空间文件丢失后从磁盘上打捞出部分数据页面;3,恢复删除记录; 二,功能; 从数据页中直接转储出文本格式的行数据,从而可以后期用 LOAD DA ...
- 按按钮调用PHP function函数
首先,请大家看一段HTML代码: <html> <head> </head> <body> <input type=button on_click ...
- Xamarin android PreferenceActivity 实现应用程序首选项设置(一)
应用程序首选项屏幕 类似系统设置界面. PreferenceActivity 是另一种类型的Activity,通过PreferenceActivity 可以以最少量的工作显示某些Preference列 ...
- [转]Excel生成批量SQL语句,处理大量数据的好办法
当有大量重复体力工作写入或修改数据到数据库中时,可以 第一,将Excel数据整理好了之后,通过SQL的导入功能直接导进数据库,但是得保证数据库字段和Excel的字段一致. 第二,通过Excel来生成对 ...
- 【转】分享10VPN
以下介绍的vpn,都是有免费流量赠送的免费vpn,完全不免费的不在之列. 免费vpn因为用的人比较多,所以高峰时段可能会有点慢,但是人少时,还是比较顺畅的.对于偶尔浏览外网,看看新闻的同学来说,免费v ...
- php框架-yii
安装 修改权限问题:runtime;web/assets(mac上) 配置cookie加密串 config/web.php 修改cookieValidationKey L12 配置数据库 控制器: 默 ...
- javascript实现暂停
<!DOCTYPE HTML><html> <head> <title> New Document </title> <meta ...