zoukankan      html  css  js  c++  java
  • 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函数

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/mona524/p/7725884.html
Copyright © 2011-2022 走看看