更改自定义绑定处理程序,以便使用IIFE进行分配

change a custom binding handler so that it is assigned using an IIFE

本文关键字:IIFE 分配 自定义 绑定 处理 程序      更新时间:2023-09-26

我有一个自定义绑定处理程序,希望将其修改为IIFE。我一直在网上读到关于IIFE的文章,但不知道如何将我的自定义句柄更改为IIFE。那么,我如何将以下绑定处理程序更改为IIFE

define(['knockout', 'jquery'], function(ko, $) {
    ko.bindingHandlers.er = {
        init: function(el, va) {
            console.log($(el).find('.n').text());
            $(el).find('.edit').hide().end().find('.detail').show();
            $(el).find('.ebtn').on('click', function() {
                $(el).find('.edit, .detail').toggle();
            });
            $(el).find('.ubtn').on('click', function() {
                $(el).find('.edit, .detail').toggle();
            });
        }
    };
});

您在这里要问什么还不清楚:(.
立即调用函数表达式(IIFE)是一个立即执行的匿名函数。在你的情况下,如果你不能更具体地说,真的很难猜测你想把生命放在哪里
我通常会把我的整个代码放入一个iife中,以利用函数范围并将其用作闭包,从而最大限度地减少全局对象污染,通常看起来是这样的:

(function(global,undefined){
    // the code goes here
    // global === window
})(this);

在你的情况下,你也可以这样做:

 (function(global,undefined){
    define(['knockout','jquery'],function(ko,$){
        // ...
    });
})(this);

更新:
以下是对那些需要它们的人的一些解释。使用以下模式:

  • 以防止全局变量泄漏,例如var foo = bar;(之后为window.foo === foo
  • 以防止CCD_ 3值被重写。假设您想检查某个内容是否未定义。你有两种方法:
    • typeof foo === 'undefined'
    • foo === undefined
      第二个较短,但通常不首选,因为可以简单地重写CCD_ 6变量的值:CCD_
      通过不在iife中为undefined参数提供实际值,实际上是在将undefined变量重置为未定义
  • 推广全局对象
    • 有人说,访问global变量比访问window对象快,因为js引擎首先查看较低的范围
    • 如果您在不同于浏览器的环境中运行代码,并且您有对window对象的调用,那么您的代码可能会中断,因为全局对象因环境而异(adobe-pdfs、node-js、rhino…)。这可以通过将全局对象重映射为变量(在我们的例子中为global),从全局范围将其重映射为this对象来解决