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 条评论
登录 后参与评论

相关文章

来自专栏Dawnzhang的开发者手册

详细的正则表达式

只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字:。"^\...

814
来自专栏程序员宝库

如何用JavaScript手动实现一个栈

在生活中也能发现很多栈的例子。例如,厨房里堆放的盘子,总是叠在上方的先被使用;输入框内容进行删除时,总是最后输入的先删除;弹夹中的子弹,越后装入的,越先发射.....

904
来自专栏MelonTeam专栏

Swift学习笔记(初始化过程)

网上介绍swift基本语法的文章已经有不少,我这里就不累赘。这篇文章主要想讲的是:swift的初始化。

4206
来自专栏大愚Talk

Golang中函数传参存在引用传递吗?

官方文档已经明确说明:Go里边函数传参只有值传递一种方式,为了加强自己的理解,再来把每种传参方式进行一次梳理。

812
来自专栏成长道路

文件的字节流和字符流

1.字节流 进行读取出文本的内容 try { FileInputStream fis=new FileInputStream(fileName); ...

1850
来自专栏积累沉淀

JavaScript正则表达式

什么是正则表达式? 正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。 在JavaScript脚本中,利...

2305
来自专栏老马说编程

(62) 神奇的序列化 / 计算机程序的思维逻辑

在前面几节,我们在将对象保存到文件时,使用的是DataOutputStream,从文件读入对象时,使用的是DataInputStream, 使用它们,需要逐个处...

1796
来自专栏技术博客

C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

   这一节主要来了解一下类和结构体之间的异同点、以及针对String和StringBuilder的用法、equals和==,其实可以看出很多地方都用到了上一节...

694
来自专栏Micro_awake web

es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)

1.函数可以设置参数默认值 1 function test1(x,y=1){ 2 console.log(x,y) 3 } 4 te...

16910
来自专栏拭心的安卓进阶之路

深入理解 Java 反射:Class (反射的入口)

深入理解 Java 反射系列: 深入理解 Java 反射:Class (反射的入口) 深入理解 Java 反射:Field (成员变量) 深入理解 Java ...

20810

扫码关注云+社区