• JavaScript基础-自己定义自己的函数(016)


    把一个函数对象赋值给变量后,就可以通过这个变量再次定义函数,甚至可以在一个函数内部再次定义它自己:

    var scareMe = function () {
        alert("Boo!");
        scareMe = function () {
            alert("Double boo!");
        };
    };
    // using the self-defining function
    scareMe(); // Boo!
    scareMe(); // Double boo!
    

     如果你需要在一个函数第一次执行的时候做一些特别的事情,就可以使用这种模式。但如果把这个变量赋值给另一个对象再执行,或是把它作为一个对象的方法执行,这种模式有可能会失效,考虑下面的代码:

    // 1. adding a new property
    scareMe.property = "properly";
    
    // 2. assigning to a different name
    var prank = scareMe;
    
    // 3. using as a method
    var spooky = {
        boo: scareMe
    };
    
    // calling with a new name
    prank(); // "Boo!"
    prank(); // "Boo!"
    console.log(prank.property); // "properly"
    
    // calling as a method
    spooky.boo(); // "Boo!"
    spooky.boo(); // "Boo!"
    console.log(spooky.boo.property);  // "properly"
    
    // using the self-defined function
    scareMe(); // Double boo!
    scareMe(); // Double boo!
    console.log(scareMe.property); // undefined
    

     这种模式的核心就是secareMe存放的是一个函数对象的引用,而这个引用在原来的函数对象中被修改。所以当这个函数对象的引用被赋值给另一个变量 prank时,就不能通过secareMe来修改parnk的引用,所以模式就失效了。这也体现了JavaScript里函数是一个对象的事实。

  • 相关阅读:
    Leetcode-Partition List
    Leetcode-Gray Code
    Leetcode-Subsets II
    Leetcode-Reverse Linked List II
    Leetcode-Resotre IP Addresses
    Leetcode-Decode Ways
    Leetcode-Trapping Rain Water
    EVA 4400存储硬盘故障数据恢复方案和数据恢复过程
    HP DL380服务器RAID信息丢失数据恢复方法和数据恢复过程分享
    ESXi5.0误删除虚拟机还有办法恢复吗?答案是可以!
  • 原文地址:https://www.cnblogs.com/Bryran/p/3964796.html
Copyright © 2020-2023  润新知