js自执行函数&扩展方法

Posted 皖心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js自执行函数&扩展方法相关的知识,希望对你有一定的参考价值。

我们通常将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扩展方法的基本形式:

$.fn.extend({
    ‘myMethod‘: function () {
        console.log(‘do something‘);;
    }
});

通过如上方式定义的扩展方法,需要通过jQuery选择器调用,比如通过标签选择器$("button").myMethod(args)

示例:

(function () {

    function init() {
        console.log(‘do something‘);
    }
    $.extend({
        ‘myMethod‘: function () {
            init();
        }
    })
})();

调用:

<script src="jquery-3.2.1.js"></script>
<script src="custome.js"></script>
<script>

  $(function () {
      $.myMethod();
  });

</script>

在页面加载完成后,通过调用$.meMethod()jQuery.myMethod()来执行init函数

以上是关于js自执行函数&扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

VS Code中自定义Emmet代码片段

学习js函数--自执行函数

如何在伪造查看器中将自定义材质添加到片段

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程