javascript模仿块级作用域

模仿块级作用域

var somefunction=function(){

///这里是块级作用域

}

somefunction();

在这里定义了一个函数,然后立即调用。不会报错。

然而,下面的代码:

function(){

//这里是块级作用域

}(); //出错

这段代码会导致语法错误,因为javascript将function关键字当做一个函数声明的开始,而函数声明后不能跟圆括号。

然而函数表达式的后面可以跟圆括号。将函数声明转为函数表达式,像下面给它加上一对圆括号就可以了:

(function(){

//这里是块级作用域

})();

(function(){

var now = new Date();

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

alert("happy year");

}

})();

这段代码放到全局作用域中,确定那天是1月1日,显示新年快乐。这种做法减少闭包占用内存的问题,因为没有指向匿名函数的引用。执行完毕,立即销毁作用域链。

静态私有变量

通过私有作用域中定义私有变量或函数,可以创建特权方法:

(function(){

//私有变量

var privateVariable = 10;

//私有函数

function privateFunction(){

return false;

}

//构造函数

MyObject = function (){};

//特权方法

MyObject.prototype.piblicMethod = function (){

privateVariable++;

return privateFunction();

}

})();

这个模式在定构造函数时并没有使用函数声明,而是使用函数表达式。

初始化未经声明的变量,总是会创建一个全局变量。因此Myobject成为一个全局变量。但是在严格模式下给未经声明的变量赋值会导致错误。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2014-08-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏五分钟学算法

每天一算:Reverse Linked List

1071
来自专栏卡少编程之旅

Javascript一些优雅实现

35411
来自专栏前端黑板报

ES6-arrows

从今天开始记录学习ES6的知识点,这次学习的是新增:Arrow functions Arrows以=>为简写形式,特点: 语法简洁 文法固定的this对象 总是...

2025
来自专栏Flutter入门

Android OpenGL ES(一)-开始描绘一个平面三角形

今天的目标是做一个OpenGL ES学习的开端。就是画一个简单的三角形。暂时不考虑坐标系的矩阵变换和纹理等。只需要用顶点着色器简单的来进行描述。 这一节需要使...

1682
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - Category的本质

iOS底层原理总结 - Category的本质 面试题 Category的实现原理,以及Category为什么只能加方法不能加属性。 Category中有loa...

3776
来自专栏有趣的Python

5-Java基础语法-流程控制之循环结构

while循环;do-while循环;for循环;循环嵌套;break语句;continue语句

1911
来自专栏java达人

js的回调函数详解

在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用。既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递...

2955
来自专栏灯塔大数据

技术 | Python从零开始系列连载(八)

导读 上一期学习了Python特色数据类型(列表)上半节,相信大家都已经熟悉啦,我们这一期就来学习Python特色数据类型(列表)下半节吧! 列表切片 列表切片...

3546
来自专栏chenjx85的技术专栏

leetcode-674-Longest Continuous Increasing Subsequence

2035
来自专栏塔奇克马敲代码

第4章 表达式

1814

扫码关注云+社区