如何才能优雅地书写JS代码

第一:关于匿名函数的使用

       要避免全局变量泛滥, 可以考虑使用匿名函数, 把不需要在外部访问的变量或者函数限制在一个比较小的范围内。

例如以下代码:

  1. <script>
  2. function func1(){
  3. var list = ["a", "b", "c"];
  4.  
  5. for(var i = 0; i < list.length; i++){
  6. //..
  7. };
  8. }
  9. func1(); // 自动运行
  10. </script>

 上述代码的作用是在页面加载的时候自动执行某些操作, 并不需要被外部调用, 但是它执行过后却留下了一个全局的函数。

像这种情况, 非常有必要使用匿名函数:

如下述代码所示:

  1. <script>
  2. (function func1(){
  3. var list = ["a", "b", "c"];
  4.  
  5. for(var i = 0; i < list.length; i++){
  6. //..
  7. };
  8. })(); // 自动运行
  9. </script>

 匿名函数的书写格式(不带参数的情况下):

  1. (function(){
  2. // 代码块
  3. })();

如果后面需要添加参数的话,则这样书写:

  1. (function(arg1, arg2, argN){
  2. //..
  3. })(arg1, arg2, argN);

第二:有关命名空间的使用规范:

命名空间可以有效减少全局变量的使用,是个很不错的规范JS代码的方式,在JS中命名空间需要进行如下操作:

“对象-属性”:

  1. window.com = {}
  2.  
  3. window.com.bytter = {}
  4.  
  5. window.com.bytter.hello = function(){
  6. alert("hello");
  7. }

 那么什么情况下才会使用到命名空间呢?

如果您需要给某个已经存在的页面添加一些功能,有可能需要添加好多个函数,而且正好那个页面当中已经存在了好多的全局变量和函数,甚至还存在某些函数和你要新增加的函数同名,这时我们就可以使用命名空间了:

你创建一个命名空间, 把你的新函数都放在那个命名空间之下, 就可以了:

  1. <button type="button" onclick="pg.check.userAcc()">检查用户名</button>
  2. <button type="button" onclick="pg.check.userAcc()">检查帐号</button>
  3.  
  4. <script>
  5. window.pg = {}
  6.  
  7. window.pg.check = {
  8. // 检查用户名
  9. userName: function(){
  10. //..
  11. },
  12. // 检查帐号
  13. userAcc: function(){
  14. //..
  15. }
  16. };
  17. </script>

第三:如何保证多人书写的JS代码互不干扰

我们学习了匿名函数和命名空间,掌握了它们的正确使用方法,接下来我们就可以做到保证JS代码之间互不干扰:

我们把一个页面中自己维护的代码与别人维护的代码或者系统自带的代码分隔开来,做到与外部代码的耦合降低到最小。

  1. <script>
  2. // 页面命名空间
  3. window.pg = {}
  4.  
  5. //命名空间的使用
  6. // 检查用户信息
  7. // 作者:张三
  8. // 最后更新: 2012.12.31
  9. (function(){
  10.  
  11. // 私有变量
  12. var a, b, c;
  13.  
  14. // 检查用户信息的相关方法
  15. window.pg.check = {
  16. // 检查用户名
  17. userName: function(){
  18. //..
  19. },
  20. // 检查帐号
  21. userAcc: function(){
  22. //..
  23. }
  24. };
  25.  
  26. })(); // end 张三的代码
  27.  
  28. //匿名函数的使用
  29. // xxx功能
  30. // 作者:李四
  31. // 最后更新: 2012.1.1
  32. (function(){
  33. window.pg.xxx = {
  34. //..
  35. }
  36. })(); // end 李四的代码
  37.  
  38. </script>

第四:使得变量声明美观易读

1、变量必须在使用前用var进行声明;

2、变量的声明应该放在代码块或者函数的头部;

3、可在一行内声明多个变量,尽可能添加上注释信息

  1. // 声明变量 银行名称, 银行帐号
  2. var type, acc;
  3.  
  4.  
  5. // 声明变量 银行名称, 银行帐号
  6. var type = "中国银行", acc = "xxxxxx";
  7.  
  8.  
  9. var type = "中国银行", // 银行名称
  10. acc = "xxxxxx"; // 银行帐号
  1. 尽量使用易于理解的变量名,如:
  2. var bankType = "中国银行",
  3. bankAccount = "xxxxxx";

第五:函数和变量的命名

普通变量名和函数名采用"小驼峰式命名法", 如:firstName、lastName

作为构造函数的函数采用"大驼峰式命名法", 如以下代码所示:

  1. var Person = function(){
  2. //..
  3. }
  4.  
  5. var me = new Person();
  6. 常量用大写和下划线表示,如:
  7. var ROOT_PATH = "/v10/";

第六:正确地使用分号,可保证JS正常压缩

尽量做到每条语句使用分号结尾(特别是需要进行压缩的js,因为省略分号常常会导致压缩失败);

第七:有关数组的定义

尽量使用简便的方式进行数组的定义:

  1. // 比较好的定义方法
  2. var list = [1, 2, 3];
  3.  
  4. // 不好的定义方法
  5. var list = new Array();
  6. list[0] = 1;
  7. list[1] = 2;
  8. list[2] = 3;

摘自:iteye技术博客[有删改]

转载于:https://www.cnblogs.com/wenJiaQi/p/6686919.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon hough_lines 霍夫直线变换

目录hough_lines&#xff08;算子&#xff09;描述参数hough_lines&#xff08;算子&#xff09; hough_lines - 借助Hough变换检测边缘图像中的线条并将其返回到HNF中。 hough_lines&#xff08;RegionIn :: AngleResolution&#xff0c;Threshold&#xff0c;AngleGap&…

通过border来实现各种三角符号

很长时间没有动笔了&#xff0c;最近学的东西很杂很乱&#xff01;又有点丢了西瓜捡芝麻&#xff0c;走马观花&#xff0c;瞻前顾后的感觉&#xff01; 因此&#xff0c;我决定一步步来&#xff0c;化繁为简&#xff0c;今天就从border入手。 很多时候我们都会需要一个三角形或…

MFC封装API

一、Win32Application Architecture 一个Win32 Application Architecture的代码结构如下&#xff1a; LRESULT CALLBACK WinWordsProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); //定义回调处理消息函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPr…

通过阅读 Douglas Crockford 的源码学习如何写 JSON parser(一)

JSON-js Douglas Crockford 是 JSON 的发明者&#xff0c;所以通过 DC 的代码来学习 JSON 和 parser 绝对是上乘之选。这个仓库里面有四个 JS 文件&#xff0c;今天我们先研究 json_parse.js。 json_parse 定义了如下 API&#xff1a; json_parse(string) > object json_par…

halcon gen_region_hline 绘制霍夫变换提取直线

目录gen_region_hline&#xff08;算子&#xff09;描述gen_region_hline&#xff08;算子&#xff09; gen_region_hline - 将霍夫变换提取直线以普通形式描述的输入行存储为区域。 gen_region_hline( : Regions : Orientation, Distance : ) 描述 运算符gen_region_hline…

H.264视频RTP负载格式/NALU的类型

1. 网络抽象层单元类型(NALU) NALU 头由一个字节组成, 它的语法如下: |0|1|2|3|4|5|6|7| |F|NRI| Type | F: 1 个比特. forbidden_zero_bit&#xff1a;在H.264规范中规定了这一位必须为0。 NRI: 2 个比特. nal_ref_idc&#xff1…

4.10下午

转载于:https://www.cnblogs.com/yanyuying/p/6690662.html

虚函数

1、基于向上类型转换&#xff0c;基类通过虚函数可以对多个子类相似的功能实现统一管理。 2、例子&#xff1a; A为基类&#xff0c;B、C为A的同级子类。virtual只需在基类中标识一次&#xff0c;子类无需重复标识。class A {virtual void display(){cout<<"我是A&q…

Android绘制(一):来用shape绘出想要的图形吧!

目录 前言shape绘制矩形椭圆线环用shape绘制SeekBar最后前言 在没有UI设计师的时候, 或者是想简单看下效果的时候, 用shape进行快速绘制是极好的! 官方文档. shape绘制 一共有四种shape: rectangle, oval, line, ring. 矩形 我们一个一个来看, 首先是矩形: <?xml version&q…

halcon sobel 边缘检测 sobel_dir

目录sobel_dir&#xff08;算子&#xff09;描述参数sobel_dir&#xff08;算子&#xff09; sobel_dir - 使用Sobel算子检测边缘&#xff08;振幅和方向&#xff09;。 sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : ) 描述 sobel_dir计算图像的一…

静态链接库LIB和动态链接库DLL的区别 创建和示例

1.什么是静态连接库&#xff0c;什么是动态链接库静态链接库与动态链接库都是共享代码的方式&#xff0c;如果采用静态链接库&#xff0c;则无论你愿不愿意&#xff0c; lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。 但是若使用 DLL&#xff0c;该 DLL 不必被包含…

【译】x86程序员手册37-第10章 初始化

Chapter 10 Initialization 第10章 初始化 After a signal on the RESET pin, certain registers of the 80386 are set to predefined values. These values are adequate to enable execution of a bootstrap program, but additional initialization must be performed by s…

在ubuntu中安装minicom时出现device /dev/tty8 is locked解决办法

未正常关闭minicom yesaiduywf-ubuntu: ~$ ls /var/lock LCK..ttyS0 subsys yesaiduywf-ubuntu: ~$ kill 0 yesaiduywf-ubuntu: ~$ ls /var/lock subsys yesaiduywf-ubuntu: ~$ sudo minicom Welcome to minicom 2.3 或者删除/var/lock下面以LCK开头的文件转载于:https://www.…

秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

本文将带领你与多线程作第一次亲密接触&#xff0c;并深入分析CreateThread与_beginthreadex的本质区别&#xff0c;相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别&#xff0c;在实际的编程中到底应该使用CreateThread还是…

halcon get_image_pointer1获取图像指针

目录get_image_pointer1&#xff08;算子&#xff09;描述参数get_image_pointer1&#xff08;算子&#xff09; get_image_pointer1 - 访问单通道图像的指针。 get_image_pointer1(Image : : : Pointer, Type, Width, Height) 描述 运算符get_image_pointer1返回指向图像I…

如何传输文件到linux服务器?

我们知道&#xff0c;云主机文件传输是一件相对复杂的事情&#xff0c;经常需要搭建FTP服务器或者是借助其他工具来完成。下面为大家介绍一种简单易操作的传输文件到Linux服务器的方法。 Linux文件传输同Windows文件传输一样&#xff0c;我们为每一台Linux主机配置了一个1G的网…

C++学习笔记(五)--指针、NULL、引用

1. C中已经定义了NULL为0:#define NULL 0 指针p可以指向空值NULL即 p NULL;表示该指针变量不指向任何变量。   注意&#xff1a;指针未初始化与指针为NULL不同&#xff0c;   p NULL;是有值的&#xff0c;为0&#xff1b;   而在定义时&#xff1a;int *p;这时候碎虽然…

Sort函数的用法

快速排序sort的用法&#xff1a;&#xff08;适用于int float double char 。。。&#xff09; 记得加头文件&#xff01; 记得加头文件&#xff01; 记得加头文件&#xff01; 头文件&#xff1a; #include <algorithm> using namespace std ; // 两行都要写 数组排…

crf与bitrate对照表

crf与bitrate对照表 (2011-06-21 17:45:59)一些关于crf的备忘&#xff1a; 1、相较于bitrate方式&#xff0c;cpu占用与内存占用均会下降&#xff1b; 2、锐化滤镜会让crf的码率上升&#xff1b; 3、vbv对crf依然有效&#xff1b; 4、crf18就接近无损&#xff0c;字幕组惯用20-…

秒杀多线程第三篇 原子操作 Interlocked系列函数

上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见&#xff0c;我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录&#xff0c;每个用户登录用一个…