有哪些古怪的javascript 链式写法写法

OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;
欢迎您订阅我们的技术周刊
我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,
欢迎分享您的观点,经验,技巧,心得
让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;
本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(
订阅邮件周刊
在JavaScript中创建命名空间的几种写法
注意 转载须保留原文链接,译文链接,作者译者等信息。&&
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子:var sayHello = function() {
return 'Hello var';
function sayHello(name) {
return 'Hello function';
sayHello();最终的输出为& "Hello var"为什么会这样,根据 &的解释,实际上JavaScript的是按如下顺序解析的。function sayHello(name) {
return 'Hello function';
var sayHello = function() {
return 'Hello var';
sayHello();不带var的function声明被提前解析了,因此现代的JS写法建议你始终使用前置var声明所有变量;避免全局变量名冲突的最好办法还是创建命名空间,下面是在JS中合建命名空间的几种常用方法。通过函数(function)创建这是一种比较常见的写法,通过声明一个function实现,函数里设置初始变量,公共方法写入prototype,如:var NameSpace = window.NameSpace || {};/*Function*/NameSpace.Hello = function() {& this.name = 'world';};NameSpace.Hello.prototype.sayHello = function(_name) {& return 'Hello ' + (_name || this.name);};var hello = new NameSpace.Hello();hello.sayHello();这种写法比较冗长,不利于压缩代码(jQuery使用fn代替prototype),而且调用前需要先实例化(new)。使用Object写成JSON形式可以写得紧凑些:通过JSON对象创建Object/*Object*/var NameSpace = window.NameSpace || {};NameSpace.Hello = {& & name: 'world'& , sayHello: function(_name) {& & return 'Hello ' + (_name || this.name);& }};调用NameSpace.Hello.sayHello('JS');& Hello JS;这种写法比较紧凑,缺点是所有变量都必须声明为公有(public)的,导致所有对这些变量的引用都需要加this指示作用域,写法也略有冗余。通过闭包(Closure)和Object实现在闭包中声明好所有变量和方法,并通过一个JSON Object返回公有接口:var NameSpace = window.NameSpace || {};NameSpace.Hello = (function() {& //待返回的公有对象& var self = {};& //私有变量或方法& var name = 'world';& //公有方法或变量& self.sayHello = function(_name) {& & return 'Hello ' + (_name || name);& };& //返回的公有对象&}());Object和闭包的改进型写法上个例子在内部对公有方法的调用也需要添加self,如:self.sayHello(); 这里可以最后再返回所有公有接口(方法/变量)的JSON对象。var NameSpace = window.NameSpace || {};NameSpace.Hello = (function() {& var name = 'world';& var sayHello = function(_name) {& & return 'Hello ' + (_name || name);& };& return {& & sayHello: sayHello& };}());Function的简洁写法这是一种比较简洁的实现,结构紧凑,通过function实例,且调用时无需实例化(new),方案来自:var NameSpace = window.NameSpace || {};NameSpace.Hello = new function() {& var self =& var name = 'world';& self.sayHello = function(_name) {& & return 'Hello ' + (_name || name);& };};
调用NameSpace.Hello.sayHello();注* 相关文章:&
&热门文章 - 分享最多
&相关阅读 - JS学习
&关键字 - JavaScript
&欢迎订阅 - 技术周刊
我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;
我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊javascript 模块化常见写法 - 简书
javascript 模块化常见写法
参考阮一峰老师的文字
1,采用对象的方式进行模块封装,由于有了命名空间,所以不会污染到其他空间。
var module = {
    n : 0,
    m1 : function (){      //...    },
    m2 : function (){      //...    }
module.m1();//调用该模块的方法
但是module.n = 100;//这样就修改了模块内部的变量值。所以不太好。
2,采用立刻执行的函数的写法(闭包)
var module = (function(){
    var n = 0;
    var m1 = function(){      //...    };
    var m2 = function(){      //...    };
    return {      m1 : m1,      m2 : m2    };
这样就没法改变n的值了。
3,对已有模块进行添加方法之类的,或者在已有模块的基础上进行添加和改造(继承自原对象),返回一个新对象。
var module1 = (function (mod){
//或var module2 = ....
    mod.m3 = function () {      //...    };
  })(module1);
上面的代码将module1模块传入以后,进行加工,添加了一个新方法m3(),然后返回新的module1模块。
如果担心引入的module可能是不存在的,可以
var module1 = (function(mod){
})(window.module1 || {}); //参数可以为空对象
4,保证模块独立性,为了在模块内部调用全局变量,显式地将其他变量输入模块。
  var module1 = (function ($, YAHOO) {
    //...
  })(jQuery, YAHOO);
http://jalon.wang

我要回帖

更多关于 javascript 函数写法 的文章

 

随机推荐