JavaScript匿名函数之模仿块级作用域

 更新时间:2015年12月12日 09:28:24   作者:tianxintian22  
这篇文章主要介绍了JavaScript匿名函数之模仿块级作用域的相关资料,需要的朋友可以参考下

匿名函数

函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。

匿名函数:就是没有函数名的函数。

函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式

第一种:这也是最常规的一种

function double(x){
  return 2 * x;  
}

 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用。

var double = new Function('x', 'return 2 * x;');

 第三种:

var double = function(x) { return 2* x; }

 注意“=”右边的函数就是一个匿名函数,创造完毕函数后,又将该函数赋给了变量square。

JavaScript中是没有块级作用域概念的。也就是说,在块级语句中定义的变量,实际上是在包含函数中(外部函数)而非语句中创建的。

function outputNumber(count){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  } 
  alert(i);  //count 
} 

该函数在java、C#等语言中,变量i只会在for循环语句中有定义,循环结束,i也就被销毁了。但在JavaScript中,变量i是定义在outputNumber()活动对象中的,因此在它定义开始,就可以在函数内部访问它。即使重新声明同一个变量,也不会改变它的值。

function outputNumber(count){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  } 
  var i;   //重新声明变量 
  alert(i);  //count 
} 

匿名函数可以用来模仿块级作用域并避免这个问题,用作块级作用域(也称私有作用域)的匿名函数的语法如下:

(function(){ 
   //这是块级作用域 
})() 

以上代码定义变调用了一个匿名函数,将函数声明包含在一个小括号里面,表示它是个函数表达式。紧跟其后的另一对小括号会立即调用这个函数。
无论什么时候,只要临时需要一些变量,就可以用私用作用域,例如:

function outputNumber(count){ 
  (function(){ 
  for(var i=0;i<1000;i++){ 
    alert(i); 
  })(); 
  alert(i);  //导致一个错误 
} 

这样,我们在for循环外部插入了一个私有作用域。在匿名函数中定义的任何变量,都会在执行结束时被销毁。

这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。

一般来说,我们应该尽量减少向全局作用域中添加变量和函数。

这种做法可以减少闭包占用内存的问题,因为没有指向匿名函数的引用,只要函数执行完毕,就可以立即销毁其作用域链。

相关文章

  • 原生JS实现的碰撞检测功能示例

    原生JS实现的碰撞检测功能示例

    这篇文章主要介绍了原生JS实现的碰撞检测功能,涉及javascript鼠标事件响应及页面图形坐标位置运算、检测相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • 微信小程序商城项目之商品属性分类(4)

    微信小程序商城项目之商品属性分类(4)

    这篇文章主要为大家详细介绍了微信小程序商城项目之商品属性值联动选择,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Javascript 鼠标移动上去 滑块跟随效果代码分享

    Javascript 鼠标移动上去 滑块跟随效果代码分享

    这篇文章主要介绍了Javascript 鼠标移动上去 滑块跟随效果代码,有需要的朋友可以参考一下
    2013-11-11
  • JS与jQ读取xml文件的方法

    JS与jQ读取xml文件的方法

    本文通过代码实例给大家讲解js读取xml文件及jq读取xml文件的方法,对本文感兴趣的朋友一起学习吧
    2015-12-12
  • js canvas实现画图、滤镜效果

    js canvas实现画图、滤镜效果

    这篇文章主要为大家详细介绍了js canvas实现画图、滤镜效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • javaScript中with函数用法实例分析

    javaScript中with函数用法实例分析

    这篇文章主要介绍了javaScript中with函数用法,实例分析了javascript中with的功能、定义及相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • uniapp微信小程序强制更新解决示例详解

    uniapp微信小程序强制更新解决示例详解

    这篇文章主要为大家介绍了uniapp微信小程序强制更新解决的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • JavaScript一文带你玩转web表单网页

    JavaScript一文带你玩转web表单网页

    表单通常用来收集网页访问者信息,常见的表单比如搜索引擎的搜索框、各网页应用的注册或者登陆界面等,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2021-10-10
  • 自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结

    自适应布局meta标签中viewport、content、width、initial-scale、minimum-sca

    这篇文章主要介绍了移动客户端手机页面布局时各标签元素作用和适用情景,通过详解几种属性让读者更明确自适应布局的注意点,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • javascript中call apply 的应用场景

    javascript中call apply 的应用场景

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.
    2015-04-04

最新评论