`
yaasshole
  • 浏览: 664900 次
文章分类
社区版块
存档分类
最新评论

当javaScript从入门到提高前需要注意的细节:变量部分

 
阅读更多
到了HTML5的时代,对javaScript的要求不是降低了,而是更提高了。javaScript语言的入门非常简单,如果你有java、C#等C风格的结构化语言的基础,那javaScript你最多半天就可以写点什么了。但是javaScript是一种动态语言,这个特性决定了他在很多方面和java、C#等语言有极大的不同。很多人说只要会java、C#就可以在短时间内搞定javaScript,估计一般都是吹牛来的,用javaScript写点简单的应用没有问题,如果要完全比较好的掌握,那需要真正的理解javaScript的动态这个特性。
当你快速的了解的javaScript入门编程后,在提高开发能力之前,需要的是确保掌握javaScript的编程细节或者说特殊性。
而且和css在不同的浏览器中有兼容性问题一样,javaScript在不同的浏览器和版本中也同样有不同的变化。


我认为javaScript入门之后,向中级(基于面向对象的编程)发展之前,有两个问题会对开发者有影响:类型的动态和语法的灵活性。而这两点的集合,是另很多入门级的javaScript人员造成各种诡异问题的核心。我这篇文章不讨论关于语法的基础,关于核心对象的方法,也不关心dom的处理,这些内容在网上的任何javaScript教程中都有,我们讨论一个些基于代码级别但容易写错的地方,为你将来的高质量的javaScript奠定些好的基础。


我以下的内容是在IE7/8、Chrome14、FireFox10下进行测试。同时声明一个事情,下面的内容的次序比较随意,比javaScript还随意,不是作为一步步的教程给零基础看的。需要你至少有些javaScript的代码经验了。


关于变量部分

在javaScript中变量使用var声明的变量是当前作用域的变量,不使用var声明的则肯定是全局变量。


以上代码说明,当fun1被执行后,函数内没有用var声明的n变量,被注册为全局变量了。


下面的代码得到同样的执行效果


那么,我们可以明显的得到一个推理,在全局里面,window和this是同一个对象指向。


那么下面的函数在其函数状态和对象状态时this的指向是不同的,因为javaScript的动态的执行,当其执行到的时候,才去计算上下文情况。


同样作为变量,使用var声明的变量是不可以删除的,没有使用var声明的变量是可以删除的


在javaScript中声明变量非常的灵活,但这个灵活性,对控制全局和局部要有所注意。


而且,有意思的是,在通常的语言中,我们对变量总是先定义后使用,不过在javaScript中嘛……看以下代码


这样的结果,对你来说是完全可以接受和预期的,不过……

上面的现象很奇怪,如果我们当真要用x和y的时候,编译器却给予不同的对待,认为x仅仅是没有定义(认可已经声明了),而y是真正的不存在。这说明在处理一个范围的变量的时候,var无论你在哪里声明的,总是一开始就进行分配了。对于非var定义的变量嘛,就没有这样的待遇了,必须等执行到才进行分配


更需要注意的是,在函数内部声明的var变量,并不局限在声明的代码语句块中,看看以下代码


所以呢,我们推荐在一个对象/函数的第一行就把所有的局部变量全部声明完毕



注意变量之间用逗号隔离,这样的好处是明显的,自己去考虑吧。
javaScript的语法很灵活,语句后面可以不加;来表示结束,这个时候编译器会讲硬回车作为语句的结束符合


以上的代码写法我不知道有什么特别的好处,如果是炫耀你知道可以不用;来结束语句,那就到此为止吧。因为下面的代码会得到一个错误


因为javaScript会再return后面加一个;

正确的做法是


我不好说,这个原因一定是;不写引起的,但我想说明的是,你要小心javaScript对随意代码的随意处理:你总是应该让javaScript编译器知道你明确的要干嘛,而不是由他去猜呀猜的。


分享到:
评论

相关推荐

    当javaScript从入门到提高前需要注意的细节:闭包部分

    对于希望在javascript技术中提高的人群来说,闭包肯定时常是一个令人感觉神秘的技术。早先有人说javaScript中的闭包可能会引发javaScript内存管理的复杂度,也许会出现内存泄露,所以不建议用闭包。不过jQuery很好的...

    当javaScript从入门到提高前需要注意的细节:函数部分

    以下说明在javaScript中声明一个函数那是多麽的随意functionfun1(){//声明一个函数}function(){//声明一个匿名函数}varfun2=function(){//声明一个变量指向一个匿名的函数表达式}varfun3=functionfun4(){//声明一个...

    2010年 c语言入门到精通

    c 语言入门到精通 变量  变量是指在程序的运行过程中随时可以发生变化的量。  变量是程序中数据的临时存放场所。在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性。由于...

    Web前端开发第4季:JavaScript基础入门

    JavaScript是一种网页交互语言,为网页增添了巨大的表现力和交互能力,极大提高了用户... 建议在学习的过程中,一定要动手实战,这样才能真正的领悟到JavaScript的语法细节。 课程案例展示: 案例01:计算器 案例02:

    xheditor-1.1.14

    阅读本章节请先阅读:xhEditor入门基础,若你已经熟悉xhEditor的基本使用,请往下继续。 xhEditor提供两种方式初始化编辑器: 方法1:利用class属性来初始化和传递各种初始化参数,例: class="xheditor {skin:'...

    JavaScript之信息的封装 js对象入门

    JavaScript之信息的封装 在编码前,我们需要了解如下几个术语;封装:对内部数据的表现形式和实施细节进行隐藏; 私有属性和方法:外界只能通过其公开的接口与其进行存取和交互 作用域:JavaScript中,只有函数具有...

    Python变量的类型-[扩展]PyCharm的调试细节-调试之前先继续执行程序

    Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效... Python教学简单易懂,零基础小白也可以学会,只要你有耐心学习从入门到精通.从小白到高手

    EXT简体中文参考手册(PDF&CHM电子档)

    发布Ext源码时的一些细节 12 我应该从哪里开始? 13 适配器Adapters 13 核心Core 13 Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划...

    Ext 学习中文手册

    发布Ext源码时的一些细节 12 我应该从哪里开始? 13 适配器Adapters 13 核心Core 13 Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划...

    starter-blog:Packt Publishing使用React和GatsbyJS进行动手Web开发[视频]

    您需要设置一个Contentful帐户并将环境变量添加到.env文件中,此帐户才能正常运行。 先决条件 ReactJS:您应该至少对React的工作原理有基本的了解。 本课程的重点是GatsbyJS,因此尽管我们将使用React,但我不会...

    asp.net知识库

    SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using Mygeneration Templates(Sql Server) C# 获取...

    lfris-marketing-docs

    入门 git clone https://github.com/liferay/lfris-marketing-docs.gits npm i 创建.env.development和.env.production文件,向Webteam成员询问必要的环境变量 启动开发服务器npm run dev转到...

    EXT 中文帮助手册

    13 适配器Adapters 13 核心Core 13 Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划入门 16 事前...

    EXT 中文手册

    13 适配器Adapters 13 核心Core 13 Javascript中的作用域(scope) 13 事前准备 13 定义 13 正式开始 14 window对象 14 理解作用域 15 变量的可见度 15 EXT程序规划入门 16 事前...

    food-ordering-management-system

    入门 编程语言 C# JavaScript 额外的 实体框架 MS SQL服务器 代码优先 jQuery查询 UI框架 引导程序 .NET Framework 数据字典 餐厅表 变量名 数据类型 细节 restaurant_id INT 餐厅编号 restaurant_name VARCHAR...

    (全)传智播客PHP就业班视频完整课程

    9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml...

Global site tag (gtag.js) - Google Analytics