可以在JavaScript中将函数声明为变量吗?

时间:2017-05-22 03:58:07

标签: javascript function variables javascript-objects object-properties

考虑以下JavaScript对象定义:

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

我知道如果我们想使用object属性(即函数),我们必须编写以下代码:

person.fullName();

据我所知,JavaScript对象是名为属性或方法的命名值的容器。

另外,我知道我可以将 firstName,lastName,id 等对象属性定义为单个变量。 现在,我的问题是我还可以将函数“fullName”定义为变量吗?如果有可能那么如何?如果没有那么为什么?

谢谢。

4 个答案:

答案 0 :(得分:0)

有可能。请注意,您的代码与此代码等效:

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; }(或者更确切地说,评估该代码串的结果)是,就像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

答案 1 :(得分:0)

以下是您的问题的示例的简单答案

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

答案 2 :(得分:0)

在JavaScript中,变量也可以指向函数。

示例:

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

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

答案 3 :(得分:0)

除非您在创建对象时生成fullName,否则无法执行此操作:

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

否则,无法创建静态变量,只能在调用时由函数创建(例如在原始示例中)。 这是不可能的,因为按照JavaScript的设计方式,您不能静态分配动态属性(除了下面引用的ES6 getter,它仍会在每次调用中生成值)它们只会自动生成一次,而不需要您的部分或库中的某种算法来为您执行此操作。

正如我上面所述,您可以尝试ES6 getters,但这只会使看起来像属性,每次它仍会被称为访问:

示例:

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

然后您可以像这样访问它:person.fullName