当前位置: 首页 > news >正文

javascirpt怎样模仿块级作用域(js高程笔记)

  因为javascript没有块级作用域的概念,所以在块语句中定义的变量,实际上是在包括函数中而非语句中创建的。

如:

function outputNumbers(count){
    for(var i=0; i< count; i++){
        alert(i);
    }
    alert(i);
}

这个函数中定义了一个for循环,而变量 i 的初始值被设置为0。在Java、C++等语言中,变量i仅仅会在for循环的语句块中有定义,循环一旦结束,变量i就会被销毁。但是Javascript中,变量i是定义在outpuNumbers()活动对象中,因此从它有定义開始,就能够在函数内部随从訪问它。即使像以下这样错误地又一次声明同一个变量,也不会改变它的值。

function outputNumbers(count){
    for(var i=0; i< count; i++){
        alert(i);
    }
    var i;     //又一次声明变量
    alert(i);  //count
}

Javascript从来不会告诉你是否多次声明了同一个变量;遇到这样的情况,它会对后面的声明视而不见,可是会运行兴许声明中的变量初始化。匿名函数能够用来模仿块级作用域并避免这个问题。

(function(){
    //这里是块级作用域
})()
上面代码定义并马上调用了一个匿名函数。将函数声明包括在一对圆括号里,表示它实际上是一个函数表达式。而紧随其后的还有一对圆括号会马上调用这个函数,

第二种方法:

var someFunction = function(){
    //这是块级作用域
};
someFunction();

 上面样例先定义一个函数,然后马上调用它。定义函数的方式是创建一个匿名函数,并把匿名函数赋值给变量someFunction。而调用函数的方式是在函数名称后面加入一对圆括号,可是须要注意的是函数值并不能代替函数名,如

function(){
    //这里是块级作用域 
}();
这样会导致语法错误,由于Javascript将functionkeyword当作一个函数声明的開始,而函数声明后面不能有圆括号。表达式后面能够跟圆括号

转载于:https://www.cnblogs.com/mengfanrong/p/4308639.html

相关文章:

  • python 多线程编程
  • 一:Html基本结构
  • ETL的考虑
  • sass学习(2)——关于变量
  • C# 语言基础(转义字符)
  • 第一天开通博客园
  • iOS开发之进阶指南 持续更新
  • 服务器安装2个tomcat
  • html字符实体
  • java 常用资源
  • 读入外挂——秒杀scanf
  • div模拟 select 或者 其他表单组件
  • Android下gradle编译代码及混淆
  • C/C++将一个整型数组拼接成一个字符串
  • Haskell 差点儿无痛苦上手指南
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • input实现文字超出省略号功能
  • interface和setter,getter
  • java正则表式的使用
  • Js基础知识(四) - js运行原理与机制
  • Js基础知识(一) - 变量
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python_bomb----数据类型总结
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小李飞刀:SQL题目刷起来!
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • #include到底该写在哪
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (C语言)fread与fwrite详解
  • (Oracle)SQL优化技巧(一):分页查询
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (十六)一篇文章学会Java的常用API
  • (算法)N皇后问题
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)shell调试方法
  • .NET Core 2.1路线图
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Reactor简单使用教程
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @Autowired @Resource @Qualifier的区别
  • @Bean注解详解
  • @开发者,一文搞懂什么是 C# 计时器!
  • [20161101]rman备份与数据文件变化7.txt
  • [20181219]script使用小技巧.txt
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [codeforces]Levko and Permutation
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [iOS]-NSTimer与循环引用的理解