函数知多少(一)

从定义函数提及

如何定义函数?

一般来说,定义函数的体式格局有两种,分别是函数声明函数表达式

//函数声明
function foo1() {
    console.log("hello");
}

//函数表达式
var foo2 = function () {
    console.log("javascript");
}

第一次运用的时刻并没有认为这两者有什么迥殊的差异,那我们来尝尝在最前面到场实行函数的代码,是最前面哦。

foo1();
foo2();

《函数知多少(一)》
实行一下,WTF!如何报错了,我们看看毛病是什么?Uncaught TypeError: foo1 is not a function,OK,我们来设置断点来剖析一下,这里,我们把foo1foo2到场看管窗口;我们可以看到foo1函数实行之前就已获得了定义,而foo2函数却显现未定义,到这里我们就邃晓了。然则为何foo1就见效了呢?我们来说说声明提拔。

声明提拔

适才我们在一最先挪用foo1的时刻发明该函数已被定义了,证清楚明了采纳声明情势定义的函数有声明提拔的特性,作甚声明提拔?即可以在定义该函数之前挪用。而采纳表达式情势定义的函数只能递次实行,你不能在定义该函数之前挪用(人人可以本身尝尝把挪用函数的代码放在差别位置,以及换取两个函数的位置)。
接下来我们经由过程另一段代码,来看看函数声明和变量声明。
《函数知多少(一)》

var foo;
function foo() {
    console.log("hello javascript");
}
foo();

我们声清楚明了一个变量foo,接着又定义了一个函数foo,我们经由过程看管窗口发明foo一向被定义成了一个函数,明显,函数声明的优先级高于变量声明。真的是如许吗?把上面的代码轻微革新一下。
《函数知多少(一)》

var foo = "1";
function foo() {
    console.log("hello javascript");
}
foo();

实行一下,咦?又报错了,Uncaught TypeError: foo is not a function,在实行var foo = "1"以后,看管器写着foo: "1",我们声明的函数被变量覆蓋了,到这里我们可以获得结论了,经由初始化的变量声明优先级高于函数声明。

关于参数

在函数中引入参数,想必人人一定很熟悉了。

var str = "hello world";

(function foo(obj) {
    console.log("first inside:" + obj);//first inside:hello world
    obj = "hello javascript";
    console.log("second inside:" + obj);//second inside:hello javascript
}(str));

console.log("outside:" + str);//outside:hello world

我们都晓得在函数内部的转变全局变量的值对外部是不可见的,就像上面的代码,我们在函数内部转变str的值,对外部毫无影响。如今我们把参数换成对象尝尝会如何。

var people = {
    age: 18,
    sex: "man",
    location: "hangzhou"
};

(function foo(obj) {
    console.log("first inside:" + obj.age);//first inside:18
    obj.age = 23;
    console.log("second inside:" + obj.age);//second inside:23
}(people));

console.log("outside:" + people.age);//outside:23

涨学问了,假如参数是对象,在函数内部对该对象做出的转变对外部是可见的。

课后题?

function foo() {

}
foo();
var foo = function () {

}

foo()实行的是哪一个函数呢?把三段代码的位置换取一下又会有是什么状况呢?人人可以本身研究一下。

写在末了

昨天最先盘算写这篇文章之前,本认为很好明白的,但是本身就被第一个定义函数的体式格局卡了良久,之前听室友讲保护一个blog就够累的了,还录制教授教养视频、保护个人网站?当时还不认为,效果轮到本身上手写文章的时刻才发明真的很不容易,真的很信服一向对峙写blog,分享文章的那些人,恰是你们乐于分享,才让更多的开发者可以相识到更普遍的学问。别的,作者作为前端新兵,本文一定有不当之处,迎接批斗~~~

    原文作者:BingqiChen
    原文地址: https://segmentfault.com/a/1190000004024070
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞