摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html
js没有块级作用域,简单的例子:
for(var i=0;i<10;i++){
alert(i);
}
alert(i);
for循环后的i,在其它语言像c、Java中,会在for结束后被销毁,但js在后续的操作中仍然能访问到i值,即for循环后的alert(i);会弹出数值i=10;
js模仿块级作用域:
(function(){
for(var i=0;i<10;i++){
alert(i);
}
})();
alert(i);
js私有作用域(模仿块级作用域) 语法格式:
(function(){
//这里是块级作用域
//作用:限制向全局作用域中添加过多的变量和函数,即避免内部临时变量影响全局空间
})();
将函数声明包含在一对()中,表示该函数实际是一个函数表达式(注:函数表达式后面可以跟(),要将函数声明转换成函数表达式,只需用()将函数声明包括起来即可),而紧随其后的另一对()会立即调用这个函数。
因此(function(){})(); 可理解成定义了一个函数表达式后,并立即调用该函数表达式,即等同于定义了:
var someFunction=function(){}()
或
var someFunction=function(){};
someFunction();
值得注意的是(function(){})(); 后面是有带分号;的,不带这个分号,(function(){})()后面的代码会报错的!这个,联合上面函数表达式后面的分号;来看就可解释为什么要带这个分号了。
(function(){})() 第2个括号可带多个参数,形如:
(function(arg1,arg2){
})(arg1,arg2);
或
var someFunction=function(arg1,arg2){}(arg1,arg2);
若第2个括号带了参数,则后面调用该函数必须带相应的参数,否则会报错,如:
someFunction()
不带参数会报错:Uncaught TypeError: undefined is not a function
js私有作用域(function(){})(); 模仿块级作用域的更多相关文章
-
js模仿块级作用域(js没有块级作用域私有作用域)
js模仿块级作用域(js没有块级作用域私有作用域) 一.总结 1.js没有块级作用域:在for循环中定义的i,出了for循环还是有这个i变量 2.js可以模拟块级作用域:用立即执行的匿名函数:(匿名函 ...
-
Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用 ...
-
JS 模仿块级作用域
function outputNumbers(count) { for (var i=0; i<count; i++) { console.log(i); } var i; // 重新声明变量 ...
-
JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)
作用域 对于有块级作用域的语言来说,for语句中定义并初始化的变量i在循环外是无法访问的. 而javascript没有块级作用域,for语句中定义的变量i在循环结束后,依旧会存在于循环外部的执行环境( ...
-
JavaScript函数表达式、闭包、模仿块级作用域、私有变量
函数表达式是一种非常有用的技术,使用函数表达式可以无需对函数命名,从而实现动态编程.匿名函数,是一种强大的方式,一下总结了函数表达式的特点: 1.函数表达式不同于函数声明,函数声明要求有名字,但函数表 ...
-
javascirpt怎样模仿块级作用域(js高程笔记)
因为javascript没有块级作用域的概念,所以在块语句中定义的变量,实际上是在包括函数中而非语句中创建的. 如: function outputNumbers(count){ for(var i= ...
-
JavaScript模仿块级作用域
avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...
-
JavaScript之模仿块级作用域
简介:在JavaScript中没有块级作用域的概念.这意味这在块语句中定义的变量,实际上在包含函数中而非语句中创建的.证明代码如下: function outputNumbers(count){ fo ...
-
JavaScript IIEF 模仿块级作用域
前言 JavaScript没有块级作用域的概念.但是通过IIEF 立即执行函数我们可以实现块级作用域. function outputNumbers(count){ for (var i=0; i & ...
随机推荐
-
ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄解决方法
1.查看当前连接进程数SQL>select count(*) from v$process;2.查看连接数上限SQL>select value from v$parameter where ...
-
Linux清除磁盘上的RAID信息
我的笔记本是DELL的Inspiron 14z,原装存储器是由32G的固态硬盘和512G的机器硬盘组成.后来我自己又给它加了一个256G的固态硬盘,装并装上了CentOS,打算把500G的机械硬盘当资 ...
-
oracle 11g rac 修改字符集
系统版本: Oracle Linux Server release 5.7 数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.3 ...
-
javascript切换效果
html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...
-
uva 11529 - Strange Tax Calculation(计数问题)
题目链接:uva 11529 - Strange Tax Calculation 题目大意:给出若干个点,保证随意三点不共线.随意选三个点作为三角行,其它点若又在该三角形内,则算是该三角形内部的点.问 ...
-
Node.JS开发环境准备
1.安装Nodejs的Windows包. 官网:http://nodejs.org/ 2.可以使用cmd运行nodejs项目,命令格式: node 文件名.js node 文件名 3.对于不熟悉的 ...
-
tcpcopy真实流量压测工具
https://quentinxxz.iteye.com/blog/2249799 http://blog.chinaunix.net/uid-25057421-id-5576741.html htt ...
-
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二):数据库设计
数据库设计 系统主要包含用户(sys_user).组织(sys_dept).角色(sys_role).菜单(sys_menu).角色组织(sys_role_dept).角色菜单(sys_role_me ...
-
express和数据库(MySQL)的交互(二)
一.安装express前面都讲了 1.express. cnpm || npm install express --save 2.中间件 a.cnpm || npm install body-pars ...
-
Java设计模式—解释器模式&;迭代器模式简介
解释器模式在实际的系统开发中使用得非常少,因为它会引起效率.性能以及维护等问题,一般在大中型的框架型项目能够找到它的身影,如一些数据分析工具.报表设计工具.科学计算工具等,若你确实遇到" ...