Javascript &引用;新";声明函数之前的运算符

Javascript &引用;新";声明函数之前的运算符,javascript,Javascript,我喜欢探索javascript作为我对整个编程的第一个参考,但因为我不是专业人士,所以不能理解很多东西。 因此,如果有人能解释幕后发生了什么,我们将不胜感激 在body标签中,我声明了两个函数,一个带有“new”,另一个没有 新函数sayHi(){alert('hi')} 函数sayHello(){alert('hello')} 因此,调用第一个函数时不使用(),因此我可以在加载文档时看到“hi”,因为我理解正确。但是要看到“hello”,我应该在代码中的某个地方使用类似sayHello.c

我喜欢探索javascript作为我对整个编程的第一个参考,但因为我不是专业人士,所以不能理解很多东西。 因此,如果有人能解释幕后发生了什么,我们将不胜感激

在body标签中,我声明了两个函数,一个带有“new”,另一个没有

  • 新函数sayHi(){alert('hi')}
  • 函数sayHello(){alert('hello')}
因此,调用第一个函数时不使用(),因此我可以在加载文档时看到“hi”,因为我理解正确。但是要看到“hello”,我应该在代码中的某个地方使用类似sayHello.call()的东西

我想我理解了“new”操作符作为创建对象实例的主要目的,而且我甚至可以假设函数对象的declare实例(有或没有“new”操作符)之间有细微的区别

但实际上会发生什么情况,使得文档在定义函数时使用“new”运算符执行函数,而另一个运算符正好留在内存中?

1)定义函数时不使用
new
,而是在调用函数以创建新对象时使用
new

2) 如果在定义函数时使用
new
,则意味着它将立即启动。这有时很方便。。。但这并不是初学者应该如何学习的。此外,这种技术的更被接受的版本称为IIFE(立即调用的函数表达式),如下所示

(function () {
/* function stuff in here */
}());
而不是

new function () { /* function stuff in here */ }
如果您试图以这种方式定义一个函数,那么如果您稍后尝试使用它,您将得到一个错误(因为它没有定义)

以下是两种实际定义函数的方法:

var sayHi = function () { console.log("Hi!"); };

这两种方法都不使用
new

为了调用它们并让它们完成工作,您不需要使用
.call()
.call()
可以工作,但它有一个特殊的用途,您在很长一段时间内都不需要它

您需要做的就是:

sayHello();
sayHi();
“新建”用于制作某种对象

用JavaScript创建对象非常简单:

var obj = {};
var person = { name : "Bob" };

person.name; // "Bob"
person.age = 32;
处理对象非常非常简单

但在其他编程语言中,您需要类似于对象蓝图的

在JS中,您可以创建如下类:

function Person (name, age) { this.name = name; this.age = age; }
然后像这样使用它:

var bob = new Person("Bob", 32);
bob.name; // "Bob";
bob.age;  // 32;
查看我将新的
放在哪里?
我使用了一个使人产生共鸣的函数,我说我想让bob成为一个新的人

但同样,在JS中,这可以简单到:

var mike = { name : "Mike", age : 20 };
不必构建函数,也不必使用
new
。它刚刚起作用。

1)定义函数时不使用
new
,而是在调用函数以创建新对象时使用
new

2) 如果在定义函数时使用
new
,则意味着它将立即启动。这有时很方便。。。但这并不是初学者应该如何学习的。此外,这种技术的更被接受的版本称为IIFE(立即调用的函数表达式),如下所示

(function () {
/* function stuff in here */
}());
而不是

new function () { /* function stuff in here */ }
如果您试图以这种方式定义一个函数,那么如果您稍后尝试使用它,您将得到一个错误(因为它没有定义)

以下是两种实际定义函数的方法:

var sayHi = function () { console.log("Hi!"); };

这两种方法都不使用
new

为了调用它们并让它们完成工作,您不需要使用
.call()
.call()
可以工作,但它有一个特殊的用途,您在很长一段时间内都不需要它

您需要做的就是:

sayHello();
sayHi();
“新建”用于制作某种对象

用JavaScript创建对象非常简单:

var obj = {};
var person = { name : "Bob" };

person.name; // "Bob"
person.age = 32;
处理对象非常非常简单

但在其他编程语言中,您需要类似于对象蓝图的

在JS中,您可以创建如下类:

function Person (name, age) { this.name = name; this.age = age; }
然后像这样使用它:

var bob = new Person("Bob", 32);
bob.name; // "Bob";
bob.age;  // 32;
查看我将新的
放在哪里?
我使用了一个使人产生共鸣的函数,我说我想让bob成为一个新的人

但同样,在JS中,这可以简单到:

var mike = { name : "Mike", age : 20 };

不必构建函数,也不必使用
new
。它只是起作用了。

这是完全不同的事情。第二个是标准的javascript函数声明(可以用
sayHi();
调用),而第一个应该重写为

new (function sayHi() { alert('hi'); });

现在您可以看到它是一个,直接传递给。如果您真的想立即()调用它,请使用
(function(){…})()

这些是完全不同的事情。第二个是标准的javascript函数声明(可以用
sayHi();
调用),而第一个应该重写为

new (function sayHi() { alert('hi'); });

现在您可以看到它是一个,直接传递给。如果您真的想立即()调用它,请使用
(function(){…})()

事实上,它从来都不方便。我同意,但典型的生活使用方法适用。除了一些副作用差异(每个都提供不同的副作用)之外,它们实现了相同的功能,这就是为什么我提到实际发生的是一个IIFE,它通常使用
(function(){/*implementation*/}())来完成(function(){