簡體   English   中英

可以在JavaScript中將函數聲明為變量嗎?

[英]Can a function be declared as a variable in JavaScript?

考慮以下JavaScript對象定義:

var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
       return this.firstName + " " + this.lastName;
    }
};

我知道,如果我們要使用對象屬性(即函數),我們必須編寫以下代碼:

person.fullName();

據我所知,JavaScript對象是名為屬性或方法的命名值的容器。

另外,我知道我可以將對象屬性(如firstName,lastName,id)定義為單個變量。 現在,我的問題是我也可以將函數“ fullName”定義為變量嗎? 如果有可能,那怎么辦? 如果沒有,那為什么呢?

謝謝。

有可能的。 請注意,您的代碼與此代碼等效:

var person = {};
person.firstName = "John";
person.lastName = "Doe";
person.id = 5566;
person.fullName = function() {
  return this.firstName + " " + this.lastName;
}

要注意的重要一點是function() { return this.firstName + " " + this.lastName; } function() { return this.firstName + " " + this.lastName; } (或更確切地說,該代碼字符串的求值結果)是一個 ,就像5566一樣,並且可以包含在屬性,變量或數組中,就像5566一樣。 唯一的區別是,一個是數字,另一個是函數。

除了存儲在屬性(“方法”)中的函數的原始示例之外,以下是將函數值存儲在變量中的示例:

var sayHello = function(name) { console.log("Hello, " + name); }

它在數組中:

var adders = [
  function(x) { return a; },
  function(x) { return (a + 1) % 3; }
  function(x) { return (a + 2) % 3; }
];

在這里,它作為參數傳遞:

function twice(f, x) {
  return f(f(x));
}
twice(function(x) { return x * 2; }, 7);
// 28

這是帶有問題示例的簡單答案

jQuery(document).ready(function() {
    window.$ = jQuery;
    initializeGlobelCalls.init();   
});

var initializeGlobelCalls = function () {
    var validatefunction = function() {
        $(document).on('click','#divid',function(){//event trigger when you want to call function
        //your function code
        });
    };
return {
        init: function () {
          validatefuction();//can add multiple functions here
        }
       };
 }();

使用這種結構,您可以編寫多個函數,首先需要定義諸如validatefunction函數,然后將其添加到init中。

在JavaScript中,變量也可以指向函數。

例:

var fullName = function(param) {
  return param;
}

console. log(fullName('some text')); 

除非您在創建對象時生成fullName ,如下所示,否則是不可能的:

var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : ''
};
person.fullName = person.firstName + person.lastName;

否則,將無法創建僅由該函數在調用時將由該函數創建的靜態變量(例如,在您的原始示例中)。 這是不可能的,因為按照JavaScript的設計方式,您不能以只能生成靜態屬性的方式靜態分配動態屬性(除了下面引用的ES6 getter,它仍將在每次調用時生成值)一次自動執行,而無需您的部分或庫中的某種算法來為您執行此操作。

如上文所述,您可以嘗試使用ES6 getter,但這只會使其看起來像一個屬性, 每次訪問它仍會被調用:

例:

var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    get fullName() { return this.firstName + ' ' + this.lastName; }
};

然后,您將像這樣訪問它: person.fullName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM