分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

JS 模仿块级作用域

发布时间:2023-09-06 02:16责任编辑:林大明关键词:作用域

function outputNumbers(count) {

  for (var i=0; i<count; i++) {

    console.log(i);

  }

  var i;  // 重新声明变量

  console.log(i);  // 计数

}

上述中,重复声明了i变量,但是JS从来不会告诉你是否多次声明了同一变量;遇到这种情况,它只会对后续的声明视而不见

不过,它会执行后续声明中变量的初始化。匿名变量可以用来模仿块级作用域并避免这个问题。

(function() {

  // 这里是块级作用域(私有作用域)

}) ();

以上代码定义并立即调用了一个匿名函数。将函数声明包含在一对圆括号中,表明它是一个函数表达式。

function () {

  //这里是块级作用域

}();   // 出错

 上述会出错,因为JS将function关键字当作一个函数声明的开始,而函数声明后面不能跟圆括号。要将函数声明转化为函数表达式,只需要加一对圆括号

无论在什么地方,只要临时需要一些变量,就可以使用私有作用域。

function outputNumbers (count) {

  (function () {

    for (var i=0; i<count; i++) {

      alert(i);

    }

  })();  // 是闭包,使用块级作用域同时减少了闭包占用内存的问题,因为没有指向匿名函数的引用,所以一旦执行完成就会被销毁

  alert(i); // 出错

}

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

因此,变量i只能在循环中使用,使用后即被销毁。

而在私有作用域中可以访问count,是因为这个匿名函数是一个闭包,它能够访问包含作用域中所有变量。

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

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

过多的全局变量和函数容易造成命名冲突

(function () {

  var now = new Date();

  if (now.getMonth() == 0 && now.getDate() == 1) {

    alert(‘Happy New Year !‘);

  }

})();

JS 模仿块级作用域

原文地址:https://www.cnblogs.com/aizzz/p/9736850.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved