JavaScript 自执行函数和 jQuery扩展方法
来源:互联网 发布:考试专家软件怎么样 编辑:程序博客网 时间:2024/05/29 13:35
我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件。但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题。那么如何解决这个问题呢?作用域隔离。在JS中,作用域是通过函数来划分的,将JS代码封装到函数中进行调用可以避免变量名/函数名冲突的问题,但是这也并不是万无一失,因为封装函数本身有可能和其它函数重名,解决方案:自执行函数。
自执行函数是用一对圆括号将匿名函数包起来,加括号(传参)会立即执行。因为函数无名字,实现了作用域的绝对隔离和函数名的冲突问题。基本形式如下:
(function () { console.log('do something');})();
比如我们在custome.js文件中写了一些JS逻辑,并封装到函数init
中。我们用自执行函数将自己定义的函数init
包起来,就像下面这样。
(function () { function init() { console.log('execute init...'); } init();})();
当我们在html中引入custome.js:<script src="custome.js"></script>
,自执行函数会立即执行,进而执行内部定义的init
函数:
不过,自执行函数立即执行的特性,使其很难调用。通过定义jQuery扩展方法,可以解决这一问题,拿到自执行函数调用和执行的主动权。
首先我们看一下定义jQuery扩展方法的基本形式:
jQuery.extend({ 'myMethod': function () { console.log('do something'); }});
这样,通过$.myMethod()
或jQuery.myMethod()
就可以调用上面定义的方法。
定义jQuery扩展方法还有另外一种方式:.fn
jQuery.fn.extend({ 'myMethod': function () { console.log('do something');; }});
通过如上方式定义的扩展方法,需要通过jQuery选择器调用,比如通过标签选择器$("button").myMethod(args)
了解了JS自执行函数和jQuery扩展方法后,我们将二者结合起来。
下面我们利用自执行函数立即执行的特点,来定义jQuery扩展方法:
(function (jq) { function init() { console.log('do something'); } jq.extend({ 'myMethod': function () { init(); } })})(jQuery);
说明,这个自执行函数接收jQuery对象作为参数,然后在内部为jQuery定义一个扩展方法myMethod
,该方法执行真正的逻辑代码init
函数
调用:
<script src="jquery-3.2.1.js"></script><script src="custome.js"></script><script> $(function () { $.myMethod(); });</script>
说明:
- jQuery文件引入后,jQuery对象全局可用;
- 紧接着引入自定义JS文件
custome.js
,其中的自执行函数接收jQuery对象为参数,立即执行,在内部为jQuery定义一个扩展方法myMethod
- 然后我们就可以在页面加载完成后,通过调用
$.meMethod()
或jQuery.myMethod()
来执行init
函数
- JavaScript 自执行函数和 jQuery扩展方法
- JavaScript/JQuery自执行函数
- Jquery、自执行匿名函数和ajax
- Javascript 自执行函数
- JavaScript 自执行函数
- javascript自执行函数
- Javascript 自执行函数
- javascript自执行函数
- Javascript 自执行函数
- JavaScript自执行函数
- javascript自执行函数
- javascript:自执行函数
- jQuery自执行函数以及封装工具类的方法
- jQuery扩展函数方法
- javascript自执行匿名函数
- Javascript中自执行函数
- javascript 匿名自执行函数
- JavaScript 自执行函数简述
- 63.Scala中隐式类代码实战详解
- Slam设计模式
- 输入一个数 求0到这个数的阶乘的和 使用 do...while 循环
- linux网络配置
- 顺序表应用6:有序顺序表查询
- JavaScript 自执行函数和 jQuery扩展方法
- linux SUID, SGID, SBIT, 权限设定
- 又到了凄风冷雨的季节
- 用c语言生成一个猜数游戏
- angular1环境配置
- Java中ExecutorService和CompletionService区别
- 端到端车牌/验证码识别(tensorflow版)——(1)
- Anaconda3 打开Navigator报错
- 【信息安全技术】DES算法的详细设计(简单实现)