Javascript在声明时执行(所有)函数

时间:2018-01-04 21:57:08

标签: javascript html function load

当我加载一个html页面时,正在调用一系列javascript函数,尽管没有引用它们。以下函数将提醒用户“hello”和“world”,即使我没有调用validate或donotcall2

<script >
var validate = new function() {
    alert('hello');
};

var donotcall1 = function() {
    alert('hello cruel');
    return false;
};

var donotcall2 = new function() {
    alert(' world');
};
</script>

3 个答案:

答案 0 :(得分:1)

问题是您正在使用new。当你写:

variable = new <something>;

它意味着将函数<something>称为对象构造函数,例如

var myObj = new Array;

Array()作为构造函数调用,并将返回的对象分配给myObj

虽然这通常是使用命名函数完成的,但它与匿名函数的作用完全相同,而这正是您的代码所做的事情。它定义了一个匿名函数,然后将其作为对象构造函数调用,并将返回的对象分配给变量validate

要将函数本身分配给变量,请不要使用new

var validate = function() {
    alert("Hello");
};

答案 1 :(得分:-1)

您使用了错误的表示法。请改用以下内容。

var validate = function() {
  alert("Hello");
}

..等等。

请注意使用var而不是function,并且缺少new关键字。

答案 2 :(得分:-1)

声明变量的正常方式(你正在做的是):

const donotcall1 = function() {
// if you want to reassign donotcall1 later use let instead of const
    alert('hello cruel');
    return false;
};

(在ES5及更低版本中,您可以使用var代替constlet

或者你可以使用

function donotcall1 () {
    alert('hello cruel');
    return false;
};

Note the subtle difference.