JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)
作用域
对于有块级作用域的语言来说,for语句中定义并初始化的变量i在循环外是无法访问的。
而javascript没有块级作用域,for语句中定义的变量i在循环结束后,依旧会存在于循环外部的执行环境(作用域)中,在这里i的作用域是全局环境。
具体来说就是:使用var关键字声明变量时,这个变量会自动添加到距离最近的可用环境中。对于函数而言,这个最近的环境就是函数的局部环境。如果变量在未经声明的情况下被初始化,则该变量会被自动添加到全局环境。
不过有时候的确很需要块级作用域来解决一些问题,这时候我们就可以使用匿名函数来模仿块级作用域。
匿名函数
匿名函数就是没有名字的函数,有时候也被称为拉姆达(lamda)函数。
普通的函数声明如下:
 function functionName(){
  // Code goes here
 }
匿名函数 如下:
 function(){                               //   顾名思义,函数没有名字
 // Code goes here
 }
模仿块级作用域(私有作用域)
模仿块级作用域(私有作用域)的匿名函数的方式如下:
(function(){
    //块级作用域
})();
上面的代码中,首先以函数表达式的方式定义了一个函数,然后立即调用它。在这里定义函数的方式就是先创建一个匿名函数,然后将其赋值给变量myFunc,而在函数名称后加一对圆括号即表示调用函数。
因为在javascript中,function关键字表示一个函数声明的开始,而函数声明后面不能直接跟圆括号。而函数表达式后面可以跟圆括号,来表示函数调用。
注意:
在函数声明外面加一对圆括号就可以转换成函数表达式,事实上在括号前面添加 + — 等都能够将其转化为表达式。
立即执行函数 函数作用域
JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)的更多相关文章
- JavaScript函数表达式、闭包、模仿块级作用域、私有变量
		
函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表 ...
 - Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
		
昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用 ...
 - JavaScript模仿块级作用域
		
avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...
 - JavaScript之模仿块级作用域
		
简介:在JavaScript中没有块级作用域的概念.这意味这在块语句中定义的变量,实际上在包含函数中而非语句中创建的.证明代码如下: function outputNumbers(count){ fo ...
 - javascript模仿块级作用域(第一篇)
		
作用域有词法作用域和块级作用域之分,javascript属于词法作用域,而在java.C++中却是块级作用域.在javascript中,只有函数能够创建作用域,作用域是以function作为边界的. ...
 - JavaScript IIEF 模仿块级作用域
		
前言 JavaScript没有块级作用域的概念.但是通过IIEF 立即执行函数我们可以实现块级作用域. function outputNumbers(count){ for (var i=0; i & ...
 - javascirpt怎样模仿块级作用域(js高程笔记)
		
因为javascript没有块级作用域的概念,所以在块语句中定义的变量,实际上是在包括函数中而非语句中创建的. 如: function outputNumbers(count){ for(var i= ...
 - 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
		
原文:你不知道的js系列 在第(二)节中提到的,标识符在作用域中声明,这些作用域就像是一个容器,一个嵌套一个,这个嵌套关系是在代码编写时定义的. 那么到底是什么产生了一个新的作用域,只有函数能做到 ...
 - JS 模仿块级作用域
		
function outputNumbers(count) { for (var i=0; i<count; i++) { console.log(i); } var i; // 重新声明变量 ...
 
随机推荐
- struts2中token的令牌机制
			
通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交.比如在登陆过程中,通过使用redirect,可以让用户登陆之上重定向到后台首页界面,当用户刷新界面时就不会触发重复提交了. ...
 - Embedded Linux Primer----嵌入式Linux基础教程--导论
			
第一章 导论 在这一章里(将要学习到) 为什么是Linux 嵌入式Linux现状 开源和GPL(译者:通用公共许可证) 标准和有关团体 本章总结 放弃专有操作系统正在许多传统嵌入式操作系统公司引起一阵 ...
 - 排序算法用C++的基本算法实现十个数排序
			
本文个人在青岛喝咖啡的时候突然想到的...近期就有想写几篇关于排序算法的文章,所以回家到之后就奋笔疾书的写出来发布了 冒泡排序法 道理: 它重复地访问过要排序的数列,一次比较两个元素,如果他们的顺序错 ...
 - 【Zookeeper】源码分析之持久化--FileTxnSnapLog
			
一.前言 前面分析了FileSnap,接着继续分析FileTxnSnapLog源码,其封装了TxnLog和SnapShot,其在持久化过程中是一个帮助类. 二.FileTxnSnapLog源码分析 2 ...
 - java框架之struts2简介
			
一.Struts2简介 1.Struts2概述 Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. M:model-----数据 ...
 - centos6 安装python2.7+和神器pip
			
centos自带python版本是2.6.6,需要采用编译安装的方法安装py27 1.提前yum安装python以及pip神器依赖包(有没有必要都装上就是了,早晚有用): yum install -y ...
 - codeforces 192A Funky Numbers
			
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
 - Maven之(七)pom.xml配置文件详解
			
setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和li ...
 - Linux中一些简单命令(一)
			
1.查看当前用户:who 2.显示当前目录:pwd 3.查看当前服务器的时间:date 4.查看日历:cal+year; 例如:cal 2016 5.计算器:bc 退出计算器:quit或者ctrl+ ...
 - Ubuntu14.04 bind9配置
			
apt-get install bind9 配置域名: cn.archive.ubuntu.com 对应IP: 10.60.233.244 vim /etc/bind/name.conf.defaul ...