全局变量是不好的。所以在声名变量的时候,应该采用函数体中的唯一var模式(Single var Pattern)。这个模式有不少好处:

  • 提供了一个唯一的地方来查看函数体中声名的变量
  • 在使用一个变量之前总是先声名,这样未初始化的变量都会被赋值为undefine
  • 让你记得要声名变量。
  • 代码更简洁(因为把多个var变成了一个)

说来也简单,这个模式就是在函数体的最初,用一个var声名所有本地变量(local variable)。

function func() {var a = 1, b = 2,sum = a + b, myobject = {},i, j;// 函数体...
}

下面说一个在Javascript函数中本地变量声名的一个常见问题:Hoisting。Hoisting可以理解为变量声名在函数内“提起”。为了解释这一现象,看看下面的代码:

// antipattern
myname = "global"; // global variable
function func() {alert(myname); // "undefined"var myname = "local";alert(myname); // "local"
}
func();

在函数中第一次使用的myname本来是想调用全局变量,但得到的结果却是undefined。因为在Javascript是允许在任何地方重复使用var声名变量的,而在函数体内部,变量的声明若在中间位置(用var声明),其效果与在函数体最初声名是一样的,但只是声名却没有初始化,这才出现了undefined的情况。所以上面的代码与下面的效果相当:

myname = "global"; // global variable
function func() {var myname; // same as -> var myname = undefined;alert(myname); // "undefined"myname = "local";alert(myname); // "local"
}
func();

转载于:https://www.cnblogs.com/Bryran/p/3969293.html

JavaScript基础函数体中的唯一var模式(002)相关推荐

  1. VN-SGG JavaScript 基础(中)

    [VN-SGG] JavaScript 基础(中) JavaScript视频课程笔记[入门到精通],这只是笔记!!! 主要内容: this,对象,原型对象,垃圾回收,数组: call.apply,ar ...

  2. JavaScript基础: DOM中操作属性以及自定义属性

    上一篇聊了一些常用的事件以及演示其如何使用,演示的时候发现一件事情,那就是DOM操作不单是得到元素,还可以修改元素的属性.现在开始如何操作其属性. 普通自带的属性 这些属性是某些标签自带的属性比如sr ...

  3. JavaScript-百炼成仙(第1节掌握JavaScript基础1.1-1.21)

    文章目录 1.1 第一章 初入宗门 1.2 第二章 直接量 1.3 第三章 数据类型 1.4 第四章 数据类型 扩展内容: 1.5 第五章 基础考核 1.6 第六章 何老 1.7 第七章 对象数据类型 ...

  4. 前端——javascript基础-ECMAScript

    文章目录 JavaScript简介 ECMAScript JavaScript的引入方式 javascript得输出方式: 变量 五种基本数据类型 运算符 数据类型转换 if语句 switch语句 w ...

  5. javascript百炼成仙 第一章 掌握JavaScript基础 1.12 JavaScript运算符

    题目一出,真是几家欢喜几家愁,那些复习得好的,自然可以款款而谈,可是那些本身基础就薄弱的弟子,立刻尴尬地说不出话来.甚至有的弟子已经举双手表示要放弃比赛.这些举动立刻引来了场外那些大弟子的哄笑.尤其是 ...

  6. 函数体中的全局变量与局部变量

    首先看一道笔试题: 1 var a = 100; 2 function testResult(){ 3 var b = 2 * a; 4 var a = 200; 5 var c = a / 2; 6 ...

  7. javascript基础系列:javascript中的变量和数据类型(一)

    javascript基础系列:javascript中的变量和数据类型(一) 今天开始去重新系统温习一遍js基础,并作下记录 javascript是由三部分组成: ECMASCRIPT(ES): 描述了 ...

  8. Javascript基础与面向对象基础~第四讲 Javascript中的类对象

    今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一 ...

  9. 前端基础:html基础(css基础和JavaScript基础)/01/B/S网络结构,html文件结构,html标签格式,lt;bodygt;中的一些常用标记

    前端基础:html基础(css基础和JavaScript基础)/01/B/S网络结构,html文件结构,html标签格式,<body>中的一些常用标记 html:超文本标记语言(非编程语言 ...

最新文章

  1. 3.递归猴子吃桃问题
  2. 推荐 10 个实用型的热门开源项目,开发效率又能提升了!
  3. Dynamics CRM2016 Web API之更新记录
  4. qt开发环境 - c++之结构,联合,枚举
  5. Invisor for Mac(媒体文件检查工具)v3.14免激活版
  6. js Iframe与父级页面通信及IE9-兼容性
  7. OpenCV调整图像的亮度
  8. 弹性理论法研究桩基受力计算公式_桩基础沉降计算方法及相关的理论分析
  9. java中contains的用法_好程序员Java教程分享Java中this的几种用法
  10. T8 ADS1299开发板的默认设置
  11. 如何用计算机求一个正数的算术平方根,用计算器求一个正数的算术平方根
  12. 解决Windows无法访问指定设备路径或文件,您可能没有合适的权限访问这个项目
  13. 山东农业大学/基础训练5
  14. php 逻辑思维题,倘若3分钟内,你能答对这道智力题,说明你的逻辑思维能力很强...
  15. 如何使用保存实例状态保存活动状态?
  16. 公民委托诉讼代理人的注意事项
  17. 如何玩转抖音电商-基础篇
  18. 2011年20大3D网站
  19. Thinkphp5关联模型的定义与使用
  20. 微积分基础知识note

热门文章

  1. JS Addition
  2. Dart 6-Day
  3. Cycle-1(循环)
  4. 7-9 地下迷宫探索 (8 分)
  5. 力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)
  6. 30分钟轻松入门Spring MVC
  7. c 语言中的菱形继承,C++中的菱形继承深入分析
  8. android gridview拖动排序,Asp.net GridView 拖拽排序    原创(欢迎拍砖,敬请嘴下留情!)...
  9. java简单的文本编辑器_采用java语言如何建立一个简单的文本编辑器
  10. 使用函数进行邮件发送的示例