javascript模仿块级作用域(第一篇)
作用域有词法作用域和块级作用域之分,javascript属于词法作用域,而在java、C++中却是块级作用域。在javascript中,只有函数能够创建作用域,作用域是以function作为边界的。
先看一段代码:
function outPut(){
for(i=0;i<5;i++) {
console.log(i);//0,1,2,3,4 第一个i
}
console.log(i);//5 第二个i
};
解释:在java等语言中,for循环这块代码中的i变量将会被销毁,第二个i打印出来就是undefined了,因为它们是块级作用域。如果需要使第二个i无法访问第一个i,就需要模仿块级作用域!
刚刚我说过,在javascript中,只有函数能够创建作用域,所以块级作用域需用函数去创建。通常的做法是通过匿名函数去实现,如下:
(function(){
//这里是块级作用域
})();
解释:javascript模仿块级作用域其实非常简单!但是对于一些基础较差的同学可能还是不能很好的理解,我们把它拆开来看。
var fn=function(){
//省略一段代码
};
fn();
这是一段非常普通的函数定义和调用的代码。在javascript中,函数是一等对象,所以可以把函数当成值或参数进行传递(题外话:当把函数当成参数放在另外一个函数当中时,就可以实现回调函数),在这里是将匿名函数赋值给变量fn,然后用一个括号()执行函数fn。
从上面可能我们会想到:直接用匿名函数function(){...}替换fn来执行不就可以了吗?所以就有了下面的代码:
function(){
... //Uncaught SyntaxError
}();
然而这是错误的写法。因为匿名函数仅仅是一个函数声明,函数声明不能够进行函数执行,如果要让它执行怎么办?我们可以通过一些手段让函数声明转变为函数表达式,从而使函数能够执行下去,常见的写法也就是用()括号把匿名函数进行包裹()!
这种javascript写法其实还有另外一种更加准确的叫法:立即调用的函数表达式(IIFE)。顾名思义:它是一个函数表达式,可以立即执行!下一篇博客我将会更加深入地讲解它。
javascript模仿块级作用域(第一篇)的更多相关文章
- JavaScript模仿块级作用域
avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...
- JavaScript函数表达式、闭包、模仿块级作用域、私有变量
函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表 ...
- JavaScript之模仿块级作用域
简介:在JavaScript中没有块级作用域的概念.这意味这在块语句中定义的变量,实际上在包含函数中而非语句中创建的.证明代码如下: function outputNumbers(count){ fo ...
- JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)
作用域 对于有块级作用域的语言来说,for语句中定义并初始化的变量i在循环外是无法访问的. 而javascript没有块级作用域,for语句中定义的变量i在循环结束后,依旧会存在于循环外部的执行环境( ...
- JavaScript IIEF 模仿块级作用域
前言 JavaScript没有块级作用域的概念.但是通过IIEF 立即执行函数我们可以实现块级作用域. function outputNumbers(count){ for (var i=0; i & ...
- Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用 ...
- javascirpt怎样模仿块级作用域(js高程笔记)
因为javascript没有块级作用域的概念,所以在块语句中定义的变量,实际上是在包括函数中而非语句中创建的. 如: function outputNumbers(count){ for(var i= ...
- Javascript的块级作用域
一.块级作用域的说明 在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c. ...
- JS 模仿块级作用域
function outputNumbers(count) { for (var i=0; i<count; i++) { console.log(i); } var i; // 重新声明变量 ...
随机推荐
- 2g-3g
- Python 新浪微博中提取最常见转载的微博转载了几次,username,内容
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-4 @author: guaguastd @name: fi ...
- Linux学习笔记——举例说,makefile 添加宏定义
0.前言 从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile.假设自己动手写一个makefile总认为非常吃力. 所以特意 ...
- php_DWZ-JUI中碰到的问题解决方法详解(thinkphp+dwz)
原文:php_DWZ-JUI中碰到的问题解决方法详解(thinkphp+dwz) 折腾了两天,dwz删除后,数据不能自动刷新,解决方案,直接看图 . 1. 删除.修改状态后无法刷新记录: 在dwz. ...
- Learn Python More
0, 看了一个python项目开源源码, 才知道现在这点python知识实在是弱爆了.. 尼玛就像学了2500个常用汉字, 然后要去理解"楚辞".. 代码如下, 解释一点一点从网上 ...
- 采用oracle官方文件(11G)——初步Concept
采用oracle官方文件(11G)示例 这里是oracle官方文档界面,想了解oracle,阅读官方文档是唯一的方法,大致了解官方文档的使用,对官方文档有一个更直观的认识.文档可通过文章关联的链接查看 ...
- JSP具体条款——response对象
response对象 response为响应对象client要求.输出信息到客户.他封装JSP反应生成.发送client在回应client要求. 1.重定向网页 使用response对象的sendRe ...
- java_tomcat_the_APR based Apache Tomcat 小喵咪死活启动报错_临时方案
报错信息如下: 信息: The APR based Apache Tomcat Native library which allows optimal performance in productio ...
- 赵雅智_Android编码规范
凝视 导入mycodetemplates.xml统一凝视样式 须要加凝视的地方 类凝视(必加) 方法凝视(必加) 块凝视主要是数据结构和算法的描写叙述(必加) 类成员变量和常量凝视(选择性加入) 单行 ...
- android详细信息java.util.ConcurrentModificationException变态
在今天做android当项目,我遇到了这个异常,好吧.其实最不寻常遇到异常IllegalstateException.它们与我们的硬件连接SDK抛出,我想折磨学生阿玉啊.扯远了. 今天,我想回到这个异 ...