RxJs學(xué)習(xí)筆記1--js基礎(chǔ)知識--函數(shù)

函數(shù)的聲明與定義

方式1:

function print(s) {
  console.log(s);
}

方式2:

var print = function(s) {
  console.log(s);
};
 //方式2定義函數(shù)岖妄,如果使用了函數(shù)名,如下面代碼的x,函數(shù)名在函數(shù)體外邊無效喳瓣。
var print = function x(){
  console.log(typeof x);
};
X;// ReferenceError: x is not defined

方式3:不推薦使用

var foo = new Function(
  'return "hello world"'
);

函數(shù)的調(diào)用

函數(shù)名加()表示還是調(diào)用瑟枫,() 中間

function add(x, y) {
  return x + y;
}

add(1, 1) 

第一等公民

JavaScript 語言將函數(shù)看作一種值,與其它值(數(shù)值捷泞、字符串声搁、布爾值等等)地位相同黑竞。凡是可以使用值的地方,就能使用函數(shù)疏旨。比如很魂,可以把函數(shù)賦值給變量和對象的屬性,也可以當(dāng)作參數(shù)傳入其他函數(shù)檐涝,或者作為函數(shù)的結(jié)果返回遏匆。函數(shù)只是一個(gè)可以執(zhí)行的值法挨,此外并無特殊之處。

函數(shù)名提升

JavaScript 引擎將函數(shù)名視同變量名幅聘,所以采用function命令聲明函數(shù)時(shí)凡纳,整個(gè)函數(shù)會像變量聲明一樣,被提升到代碼頭部帝蒿。所以荐糜,下面的代碼不會報(bào)錯(cuò)。

f();

function f() { ... }

獲取函數(shù)信息

  1. name屬性獲取函數(shù)的名字
function f1() {}
f1.name 
// -----
var f2 = function () {};
f2.name 
  1. length屬性獲取 函數(shù)定義之中的參數(shù)個(gè)數(shù)葛超。
    length屬性提供了一種機(jī)制狞尔,判斷定義時(shí)和調(diào)用時(shí)參數(shù)的差異,以便實(shí)現(xiàn)面向?qū)ο缶幊痰摹狈椒ㄖ剌d“(overload)巩掺。
function f(a, b) {}
f.length // 2
  1. toString方法返回一個(gè)字符串,內(nèi)容是函數(shù)的源碼页畦。帶// 注釋
function f() {
  a();
  b();
  c();
}

f.toString()
// function f() {
//  a();
//  b();
//  c();
// }

作用域

作用域(scope)指的是變量存在的范圍胖替。在 ES5 的規(guī)范中,Javascript 只有兩種作用域:一種是全局作用域豫缨,變量在整個(gè)程序中一直存在独令,所有地方都可以讀取好芭;另一種是函數(shù)作用域燃箭,變量只在函數(shù)內(nèi)部存在。ES6 又新增了塊級作用域舍败。

  1. 在函數(shù)內(nèi)部定義的變量招狸,外部無法讀取,稱為“局部變量”(local variable)邻薯。
  2. 函數(shù)外部聲明的變量就是全局變量(global variable)裙戏,它可以在函數(shù)內(nèi)部讀取。
  3. 函數(shù)本身也是一個(gè)值厕诡,也有自己的作用域累榜。它的作用域與變量一樣,由其聲明所在的位置決定灵嫌。

同名參數(shù)

同名參數(shù)壹罚,最后面的覆蓋前面的,前面的無效寿羞。

function f(a, a) {
  console.log(a);
}

f(1, 2) // 2

arguments 對象

由于 JavaScript 允許函數(shù)有不定數(shù)目的參數(shù)猖凛,在內(nèi)部是由 arguments對象機(jī)制實(shí)現(xiàn)的。
arguments對象包含了函數(shù)運(yùn)行時(shí)的所有參數(shù)稠曼,arguments[0]就是第一個(gè)參數(shù)形病,arguments[1]就是第二個(gè)參數(shù)客年,以此類推。這個(gè)對象只有在函數(shù)體內(nèi)部漠吻,才可以使用量瓜。

var f = function (one) {
  console.log(arguments[0]);
  console.log(arguments[1]);
  console.log(arguments[2]);
}

f(1, 2, 3)
//輸出1,2途乃,3

js閉包

由于在 JavaScript 語言中绍傲,只有函數(shù)內(nèi)部的子函數(shù)才能讀取內(nèi)部變量,因此可以把閉包簡單理解成“定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”耍共。

function f1() {
  var n = 999;
  function f2() {
    console.log(n);
  }
  return f2;
}

var result = f1();
result(); 

上面代碼中烫饼,函數(shù)f1的返回值就是函數(shù)f2,由于f2可以讀取f1的內(nèi)部變量试读,所以就可以在外部獲得f1的內(nèi)部變量了杠纵。
閉包就是函數(shù)f2,即定義在某函數(shù)內(nèi)部钩骇,讀取該函數(shù)內(nèi)部變量的函數(shù)比藻。

立即執(zhí)行函數(shù)

// 寫法一
var tmp = newData;
processData(tmp);
storeData(tmp);

// 寫法二
(function () {
  var tmp = newData;
  processData(tmp);
  storeData(tmp);
}());

有時(shí),我們需要在定義函數(shù)之后倘屹,立即調(diào)用該函數(shù)银亲。這時(shí),你不能在函數(shù)的定義之后加上圓括號纽匙,這會產(chǎn)生語法錯(cuò)誤务蝠。
產(chǎn)生這個(gè)錯(cuò)誤的原因是,JavaScript 引擎規(guī)定烛缔,如果function關(guān)鍵字出現(xiàn)在行首馏段,一律解釋成語句。因此力穗,行首是function關(guān)鍵字毅弧,引擎認(rèn)為這是函數(shù)的定義語句,不應(yīng)該以圓括號結(jié)尾当窗,所以就報(bào)錯(cuò)了够坐。解決方法就是不要讓function出現(xiàn)在行首,按表達(dá)式處理函數(shù)定義崖面。最簡單的方法元咙,就是將其放在一個(gè)圓括號里面。

(function(){ /* code */ })();

eval命令

eval命令接受一個(gè)字符串作為參數(shù)巫员,并將這個(gè)字符串當(dāng)作語句執(zhí)行庶香。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市简识,隨后出現(xiàn)的幾起案子赶掖,更是在濱河造成了極大的恐慌感猛,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奢赂,死亡現(xiàn)場離奇詭異陪白,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)膳灶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門咱士,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轧钓,你說我怎么就攤上這事序厉。” “怎么了毕箍?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵弛房,是天一觀的道長。 經(jīng)常有香客問我而柑,道長庭再,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任牺堰,我火速辦了婚禮,結(jié)果婚禮上颅围,老公的妹妹穿的比我還像新娘伟葫。我一直安慰自己,他們只是感情好院促,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布筏养。 她就那樣靜靜地躺著,像睡著了一般常拓。 火紅的嫁衣襯著肌膚如雪渐溶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天弄抬,我揣著相機(jī)與錄音茎辐,去河邊找鬼。 笑死掂恕,一個(gè)胖子當(dāng)著我的面吹牛拖陆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懊亡,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼依啰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了店枣?” 一聲冷哼從身側(cè)響起速警,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤叹誉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后闷旧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體长豁,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年鸠匀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕉斜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缀棍,死狀恐怖宅此,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爬范,我是刑警寧澤父腕,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站青瀑,受9級特大地震影響璧亮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斥难,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一枝嘶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哑诊,春花似錦群扶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暑劝,卻和暖如春骆莹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背担猛。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工幕垦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傅联。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓智嚷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親纺且。 傳聞我的和親對象是個(gè)殘疾皇子盏道,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容