声明函数

声明函数

原文:https://medium.com/hackernoon/declaring-functions-b9f85e7c74c6

这是我的初级开发人员博客技术部分的第六部分。这是记录我在技术领域的工作。我来自一个非传统的编码背景,所以我努力工作,练习基础知识(总是编码)。我的博客有一半是关于技术主题的,另一半是关于平等、社会公正和技术进步的。

这次又短又甜。直奔主题。关于如何在 ES5 JavaScript 中声明函数的一些基础知识。

Be Like Neo

首先,JS 编译器从上到下读取你的代码。那么函数表达式和声明有什么区别。

函数表达式

函数声明和函数表达式之间的区别在训练营中没有被很好地教给我,提升和闭包也没有。因此,你可能不得不做或者应该做的是,重新学习或者自己学习这些基础知识,以便更深入地理解 JavaScript 的基础知识。让我们看一个例子。

**var** name **=** "Baggins";

(**function** () {
    *// Outputs: "Original name was undefined"*
    console.log("Original name was " **+** name); //Why??? 

    **var** name **=** "Underhill";

    *// Outputs: "New name is Underhill"*
    console.log("New name is " **+** name);
})();

这个例子取自于一个 JavaScript 的点滴。上面的例子包含一个变量声明和一个立即调用的函数表达式函数表达式要么将函数对象存储在变量内,要么写在括号或对象内。函数后面的名字没有定义的原因是因为提升。在这种情况下,立即调用的函数表达式是在将"Baggins"赋给var name之前定义的。因此,编译器读取代码的方式如下:

var name = "Baggins";(function (){
  console.log("Original name was " + name); 
  var name = "Underhill";
  console.log("New name is " + name);
}());console.log(name);

编译器会抛出:

Original name was undefined
New name was Underhill
Baggins

上面这个函数表达式的例子很特殊,因为它是被立即调用的。然而,它仍然是一个函数表达式,因此在提升的时候,它并不优先于函数声明。例如:

const myFunc = (value) => {
  console.log(value);
};

一个函数对象被存储在一个名为myFunc的变量中。假设你调用一个函数表达式,如下所示:

myFunc('hello');const myFunc = (str) => {
  console.log(str);
};

编译器抛出

TypeError: myFunc is not a function 

因为编译器读起来像

myFunc('hello'); // tries to call this function but not in memory, errors out

函数声明

ES5 和 ES6 中的函数声明是相似的。它只包含单词function作为语句的开头。

function myFunc(str) {
  console.log(str);
}

在提升过程中,函数声明优先,变量名优先。因此,上面记录单词hello的例子产生了一个错误。如果您使用函数声明,它会运行得非常好。

myFunc('Look Ma! You can call me anywhere');function myFunc(str) {
  console.log(str);
}

啊,JavaScript 的狂野世界。下次见!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除