5个可以帮你理解JavaScript核心闭包和作用域的小例子
这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域。没有在控制台运行之前,尝试回答每个案例中会弹出什么内容,然后你可以创建一个测试文件去核对你的答案。你准备好了吗?
1、
if (!("a" in window)) {
var a = 1;
}
alert(a);
2、
var a = 1,
b = function a(x) {
x && a(--x);
};
alert(a);
3、
function a(x) {
return x * 2;
}
var a;
alert(a);
4、
function b(x, y, a) {
arguments[2] = 10;
alert(a);
}
b(1, 2, 3);
5、
function a() {
alert(this);
}
a.call(null);
我的预测答案分别是:undefined、1、不知道、10、null
答案在本文末尾,看答案之前,你敢留下你的猜测吗?
正确答案:1、undefined 2、1 3、function a(x){ return x * 2} 4、10 5、[object window]
相关推荐
-
JavaScript中的作用域链和闭包
作用域 全局作用域 局部作用域 作用域链 执行上下文 活动对象 闭包 闭包优化 JavaScript中出现了一个以前没学过的概念--闭包.何为闭包?从表面理解即封闭的包,与作用域有关.所以,说闭包以前先说说作用域. 作用域(scope) 通常来说一段程序代码中使用的变量和函数并不总是可用的,限定其可用性的范围即作用域,作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突. 全局作用域(Global Scope) 在代码中任何地方都能访问到的对象拥有全局作用域,以下几种情形拥有全局作
-
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
如代码块 复制代码 代码如下: if (true) { int i = 100; } print(i); //错误,变量i没有声明 如上面例子所示,代码块外的函数是无法访问i变量的. 但在javaScript里,情况则完全不同. 复制代码 代码如下: if (true) { var i = 100; } alert(i); //弹出框并显示100 很多现代语言都推荐尽可能迟地声明变量,但在Javascript里这是一个最糟糕的建议.由于缺少块级作用域,最好在函数体的顶部声明函数中可能用到的所有变
-
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
函数表达式 1.JavaScript中定义函数有2钟方法: 1-1.函数声明: 复制代码 代码如下: function funcName(arg1,arg2,arg3){ //函数体} ①name属性:可读取函数名.非标准,浏览器支持:FF.Chrome.safari.Opera. ②函数声明提升:指执行代码之前会先读取函数声明.即函数调用可置于函数声明之前. 1-2.函数表达式: 复制代码 代码如下: var funcName = function(arg1,arg2,arg3){ //函
-
JavaScript 变量作用域及闭包第1/2页
实例一: 复制代码 代码如下: <script type="text/javascript"> var i = 1; // 弹出内容为 1 true 的提示框 alert(window.i + ' ' + (window.i == i)); </script> 分析: 在全局定义的变量其实就是 window 对象的属性. 上面的例子可以看到,我们定义全局变量的同时,window 对象会产生一个相应的属性,如何让我们的代码避免产生这个属性呢,看下面的例子. 实例二
-
深入理解javascript作用域和闭包
作用域 作用域是一个变量和函数的作用范围,javascript中函数内声明的所有变量在函数体内始终是可见的,在javascript中有全局作用域和局部作用域,但是没有块级作用域,局部变量的优先级高于全局变量,通过几个示例来了解下javascript中作用域的那些"潜规则"(这些也是在前端面试中经常问到的问题). 1. 变量声明提前 示例1: var scope="global"; function scopeTest(){ console.log(scope); v
-
javascript中的作用域和闭包详解
一.JavaScript作用域 JavaScript变量实际上只有两种作用域,全局变量和函数的内部变量.在函数内部任何一个地方定义的变量(var scope)其作用域都是整个函数体. 全局变量:指的是window对象下的对象属性. 作用域划分:基于上下文,以函数进行划分的,而不是由块划分的. 强调两点: 1. 在同一作用域中,JavaScript是允许变量的重复定义,并且后一个定义将覆盖前一个定义. 2. 函数内部如果不加关键字var而定义的变量,默认为全局变量. var scope="glob
-
javascript作用域和闭包使用详解
作用域的嵌套将形成作用域链,函数的嵌套将形成闭包.闭包与作用域链是 JavaScript 区别于其它语言的重要特性之一. 作用域JavaScript 中有两种作用域:函数作用域和全局作用域. 在一个函数中声明的变量以及该函数的参数享有同一个作用域,即函数作用域.一个简单的函数作用域的例子: 复制代码 代码如下: function foo() { var bar = 1; { var bar = 2; } return bar; // 2} 不同于C等其它有块
-
javascript 词法作用域和闭包分析说明
复制代码 代码如下: var classA = function(){ this.prop1 = 1; } classA.prototype.func1 = function(){ var that = this, var1 = 2; function a(){ return function(){ alert(var1); alert(this.prop1); }.apply(that); }; a(); } var objA = new ClassA(); objA.func1(); 大家应
-
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
作用域分配与变量访问规则 在 ECMAScript 中,函数也是对象.函数对象在变量实例化过程中会根据函数声明来创建,或者是在计算函数表达式或调用 Function 构造函数时创建.(关于'函数对象'请见<理解Javascript_08_函数对象>).每个函数对象都有一个内部的 [[scope]] 属性,这个属性也由对象列表(链)组成.这个内部的[[scope]] 属性引用的就是创建它们的执行环境的作用域链,同时,当前执行环境的活动对象被添加到该对象列表的顶部.当我们在函数内部访问变量时,其实
-
5个可以帮你理解JavaScript核心闭包和作用域的小例子
这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域.没有在控制台运行之前,尝试回答每个案例中会弹出什么内容,然后你可以创建一个测试文件去核对你的答案.你准备好了吗? 1. 复制代码 代码如下: if (!("a" in window)) { var a = 1; } alert(a); 2. 复制代码 代码如下: var a = 1, b = function a(x) { x && a(--x);
-
深入理解Javascript中this的作用域
大家在使用Javascript的时候经常被this这个家伙搞得晕头转向的.对大多数有OOP开发经验的开发人员来说this是当前作用域中引用普通元素的标识符,但是在Javascript中它却显得古灵精怪的,因为它不是固定不变的,而是随着它的执行环境的改变而改变.在Javascript中this总是指向调用它所在方法的对象. 举一个简单的例子: 复制代码 代码如下: function test(){ alert(this); } var obj=function(){ var name='testO
-
深入理解JavaScript高级之词法作用域和作用域链
主要内容:1.分析JavaScript的词法作用域的含义 2.解析变量的作用域链 3.变量名提升时什么 最近在传智播客讲解JavaScript的课程,有不少朋友觉得JavaScript是如此的简单,但是又如此的不知如何使用,因此我准备了一些内容给大家分享一下. 这个系列主要讲解JavaScript的高级部分的内容,包括作用域链.闭包.函数调用模式.原型以及面向对象的一些东西. 在这里不包含JavaScript的基本语法,如果需要了解基础的同学可以到http://net.itcast.cn里面去下
-
javascript 实现键盘上下左右功能的小例子
复制代码 代码如下: <script type="text/javascript"> function up(){ alert("up");} function down(){alert("down");} function left(){ alert("left");} function right(){alert("right");} function jumpPage(){ if(even
-
用Javascript来生成ftp脚本的小例子
程序也很简单,就是遍历一下本地目录,然后产生一堆ftp命令. 复制代码 代码如下: function matchDemo(strFolderName) { var s; var re = /200\d{5}/ig; s = strFolderName.match(re): return(s): } function init() { strScript ="open 192.168.1.32 \n"; strScript+="user sybase 111111 \n&quo
-
javascript检测页面是否缩放的小例子
复制代码 代码如下: /* * zoomCheck */jQuery(function($){ var dCheck = $("#zoomCheck"); if(dCheck.size() != 0){ return; } dCheck = $("<span></span>").attr('id',"zoomCheck").css({ position :'fixed', left : '5px'
-
JavaScript自动设置IFrame高度的小例子
复制代码 代码如下: function SetIFrameHeight(down) { var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox =
-
JavaScript核心语法总结(推荐)
本文介绍了JavaScript的基本(常用)语法,供大家参考. Overview 先说一下Javascript该怎么写.两种形式,一种是直接把JavaScript写在HTML页面里,另一种是存在*.js文件里然后在页面内引用. 直接写时,即可以放在<head> </head>内,也可以放在<body> </body>内.一般函数是放在<head>区的,具体的执行代码是在<body>区里的.例如,在body里写: <body>
-
深入理解JavaScript单体内置对象
JavaScript中定义了两个单体内置对象:Global和Math. Global对象 Global对象是JavaScript中最特别的一个对象.不属于任何其他对象的属性和方法,最终都是它的属性和方法.实际上,没有全局变量或全局作用域,所有在全局作用域中定义的属性和函数,都是Global对象的属性. Global对象包含了一些有用的方法: 1.URI编码方法 Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,encodeURI()主要用
-
javascript执行环境及作用域详解
最近在重读<javascript高级程序设计3>,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦.今天要总结的是js执行环境和作用域. 首先来说一下执行环境 一.执行环境 书上概念,执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象.环境中定义的所有变量和函数都保存在这个对象中.虽然我们在编写代码的时候无法访问这个对象,但解析器在处理数据时会在后台用到它. 执行环境是一个概念,一种机制,它定义了变量或函数是否有权访
随机推荐
- PHP读取MySQL数据代码
- 几个提升Python运行效率的方法之间的对比
- 详解Ruby当中的算数运算
- SQL Server 2000向SQL Server 2008 R2推送数据图文教程
- shell两个文件去重的多种姿势
- Asp.Net类型转换类(通用类)代码分享
- 提升PHP执行速度全攻略(上)
- 深入解析Python中的变量和赋值运算符
- Android编程自定义圆角半透明Dialog的方法
- nodejs之请求路由概述
- JavaScript实现url参数转成json形式
- MySQL外键约束的禁用与启用命令
- Asp.Net 和 AJAX.Net 的区别第1/2页
- JavaScript判断密码强度(自写代码)
- win2003 ip安全策略 限制某个IP或IP段访问服务器指定端口图文说明
- SpringBoot整合JPA的实例代码
- java中设计模式(多例)的实例详解
- 自定义session存储机制避免会话保持问题
- Android 开发中线程的分析
- PHP实现git部署的方法教程