JavaScript这门语言是LZ最喜欢的编程语言之一,为什么说喜欢呢?因为LZ认为JavaScript的语法优美,且是动态,弱类型的脚本语言。接下来LZ将列举出编写JavaScript的时候的一些注意事项或者心得。

1、关于闭包

闭包是JavaScript的一个特性,什么是闭包呢?通过字面意思,我们能够猜到,就是封闭的一些函数的集合,也就是在闭包内的函数,是不能被外部所调用,可以理解为面向对象的私有方法。语法格式如下:

(function(){// coding
});

我们知道JavaScript的函数内可以编写函数,那么对于闭包,我们先定义一个匿名函数,然后再匿名函数内部编写私有函数。

说到闭包,我们马上会想到JavaScript的事件绑定机制,给出下面的示例:

for(var i = 0;i < 5;i++){$("a").click(function(){console.log(i);});
}

当点击a标签输出什么呢?对于上面的这段代码,如果对JavaScript不够了解的话,马上会说:“会输入1,2,3,4,5”,那么正确的结果应该是会打印5个5,很多人会问?为什么呢?在上面的这段代码,执行完for循环的时候,i的值是5,a标签绑定了5次click,那么最后点击的时候当然会输出5个5,但是如果我们一定要输入1,2,3,4,5怎么办呢?这个时候就需要用到我们的闭包:

for(var i = 0;i < 5;i++){(function(index){$("a").click(function(){console.log(index);});})(i);
}

我们可以看到在循环内部click事件之前加入了闭包,这样每次绑定都通过匿名函数将i传给click事件,这样点击后就能打赢出1,2,3,4,5了。我们可以看到匿名函数和函数最后多了一个参数,这段代码相当于:

(function(){var index = i;
});

2、this指针

有人说JavaScript最难的当属this指针了,但是我不这么认为。当你真正理解了,也会认为this指针不过如此。对于JavaScript的this指代的是什么,我用一句话进行了总结:谁调用代表谁。什么意思呢?我们通过一段代码来解释。

function Person(id,name){this.id = id;this.name = name;this.getId = function(){return this.id;};
};
var person = new Person(1,"lynn");

以上代码有很多this,我刚才说了谁调用代表谁,那么这些this是谁调用的呢?很明显,下面new了一个Person对象,那么就是person来调用,所以这里的this代表的都是person。我们知道JavaScript是动态语言,所以可以动态的设置属性,所以既然this代表的是person,那么this.id自然就是给person对象增加属性id,并且赋值为传入的参数,所以我们通过person.id 就可以得到值为1.

3、for和for...in

JavaScript的for循环和for...in循环是完全不一样的两种循环,我们来举个列子说明:

for(var i = 0;i < 5;i++){ } for(var i in person){ }

for循环的i是索引,而for...in循环的i是对象属性,因此如果我们要循环一个数组的元素的时候一定要用for循环,而需要得到对象的属性的时候,我们要用for...in循环,但是在for...in循环属性的时候,JavaScript对每个对象会加入一些内置的属性,因此我们只想得到我们自己定义的属性,需要用到hasOwnProperty()方法,判断是否是我们自己定义的属性:

for(var i in person){if(person.hasOwnProperty(i)){}
}

关于JavaScript的一些使用心得相关推荐

  1. JavaScript学习历程和心得

    一.前言 在过去,JavaScript只是被用来做一些简单的网页效果,比如表单验证.浮动广告等,所以那时候JavaScript并没有受到重视.自从AJAX 开始流行后,人们发现利用JavaScript ...

  2. [Javascript 高级程序设计]学习心得记录 函数参数传递与引用

    最近开始啃js的红宝书:<Javascript 高级程序设计>,偶有心得,记录一下. 先上代码 function howManyArgs() {alert(arguments.length ...

  3. 《JavaScript高级程序设计》心得笔记-----第四篇章

    第十六章 1.  跨文档消息传送: postMessage("消息", "发送消息的文档所在域") 2.  拖放事件: 1)   拖动某元素会依次触发:drag ...

  4. [Javascript 高级程序设计]学习心得记录11 js的BOM

    BOM(浏览器对象模型)是web中js的核心,而BOM的核心对象就是window对象.在浏览器中,window对象有双重角色,它既是通过js访问浏览器的一个接口,又是规定的Global对象.此外,还有 ...

  5. [Javascript 高级程序设计]学习心得记录2 Javascript的垃圾回收机制

    Javascript 是自动垃圾收集机制,不需要像c/c++的开发人员一样担心内存泄漏问题.这种垃圾收集机制通过找出那些不再使用的变量,释放其占用的内存从而达到垃圾回收的效果.而如何如何找出那些不再使 ...

  6. [Javascript 高级程序设计]学习心得记录9 js面向对象

    感觉最难的部分就是面向对象了,大学期间学习的是面向过程的c/c++,工作之后也没有深入了解过面向对象,通过这次的学习和回顾,也算是对面向对象有了新的认识.不过,就我在书上学到了结合个人理解随便说说,很 ...

  7. [Javascript 高级程序设计]学习心得记录10 js函数表达式

    在前面说对象的时候已经提到了函数对象,对函数的定义参数的传递包括通过argumentd.callee实现递归.这篇博客我会继续深入讲解js中的函数表达式. 一,闭包 关于闭包的概念,可以先看看http ...

  8. [Javascript 高级程序设计]学习心得记录3 根据对象数组的属性进行排序

    配合sort(),将排序的标准属性传入排序函数,在进行排序的时候将该属性取出来就行了. function createComparisonFunction(propertyName) {return ...

  9. [Javascript 高级程序设计]学习心得记录6 变量和作用域

    js的变量和其他语言的变量区别还是挺大的,它只是在特定时间用于保存特定值的一个名字而已,js的变量高度灵活,同时又很容易出问题,需要专门学习. 一,基本类型和引用类型的值 基本类型值指数据的五种基本类 ...

最新文章

  1. 如何关闭华为自动杀进程_手机自动扣费该如何删除,教你正确关闭,我们要知道!...
  2. [C编码笔记] 空串与NULL是不一样的
  3. Django学习笔记2:一个简单的开发实例
  4. 桌面程序explorer_备份Internet Explorer 7搜索提供程序列表
  5. Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂
  6. linux 中用PPA安装软件
  7. centos8 装docker 问题
  8. XSS-Game level 12
  9. 又一百度杰出科学家离职,百度研究院成中国AI的黄埔军校?
  10. X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来
  11. java抛出代码,java异常之手动抛出与自动抛出代码实例解析
  12. 复变函数:傅里叶变换
  13. Apache/MySQL/PHP 集体升级
  14. linux 软件源码安装教程,linux源码安装软件步骤
  15. 【雕刻机】使用雕刻机雕刻PCB
  16. 蓝电电池测试系统工步编辑软件,蓝电电池测试系统
  17. LOJ 6070基因 回文树 分块
  18. nodejs后端office转pdf
  19. 计算机无法还原,win7系统不能还原如何解决_win7电脑无法还原系统怎么办-win7之家...
  20. 分布式系统三大指标:可扩展性、一致性、持久性

热门文章

  1. NOI2020 瞎逛游记
  2. 【错误解决】can not be used when making a PIE object; recompile with -fPIC
  3. 书籍特别推荐:2018-06薛兆丰经济学讲义+魔鬼经济学(四本)
  4. python实训报告万能模板_(完整word版)实训报告万能模板
  5. linux安装java视频_linux安装java(zz)
  6. 后台管理系统中的登录页面
  7. 练习题---acmcoder上台阶问题-用Java实现
  8. ArcGIS学习网站
  9. linux 查看ko符号表,linux modprobe命令参数及用法详解--linux加载模块命令
  10. Android6.0以下系统判断相机权限