日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js学习(4) 函数

發(fā)布時(shí)間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js学习(4) 函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaScript有三種聲明函數(shù)的方法

(1)function命令

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

(2)函數(shù)表達(dá)式

1.var print = function(s) {console.log(s); };2.var print = function x(){console.log(typeof x); };x // ReferenceError: x is not definedprint() // function3.var f = function f() {};

將匿名函數(shù)賦予變量,如果不匿名,也只在內(nèi)部有效

函數(shù)表達(dá)式定義函數(shù)最后要加上分號(hào)代表結(jié)束

(3)Function構(gòu)造函數(shù)

可以傳遞任意數(shù)量的參數(shù)給Function構(gòu)造函數(shù),但只有最后一個(gè)參數(shù)被當(dāng)做函數(shù)體

Function構(gòu)造函數(shù)可以不使用new命令,返回結(jié)果完全一樣

var add = new Function('x','y','return x + y' );// 等同于 function add(x, y) {return x + y; }

此方法比較不常用  第一種方法倒更熟悉

如果一個(gè)函數(shù)被多次聲明,后面的聲明就會(huì)覆蓋前面的聲明

調(diào)用函數(shù)時(shí)和其他語言大致相同,使用圓括號(hào)運(yùn)算符

第一等公民 

Js把函數(shù)看成一種值,與其他值(數(shù)值,字符串,布爾值等)地位相同

凡是可以使用值的地方,就能使用函數(shù),函數(shù)只是一個(gè)可以執(zhí)行的值

function add(x, y) {return x + y; }// 將函數(shù)賦值給一個(gè)變量 var operator = add;// 將函數(shù)作為參數(shù)和返回值 function a(op){return op; } a(add)(1, 1) // 2

函數(shù)提升

 

函數(shù)的屬性和方法

name屬性:返回函數(shù)名字 ?如果采用表達(dá)式定義函數(shù),且function后有名字,則返回那個(gè)名字

length屬性:返回函數(shù)預(yù)期傳入的參數(shù)個(gè)數(shù)

toString():返回一個(gè)字符串,內(nèi)容是函數(shù)的源碼,以及注釋

對(duì)于var命令來說,局部變量只能在函數(shù)內(nèi)部聲明,在其他區(qū)塊中聲明,一律都是全局變量

函數(shù)內(nèi)部也有變量提升,var命令聲明的對(duì)象,不管在什么位置,變量聲明都會(huì)被提升到函數(shù)體的頭部

函數(shù)本身的作用域

函數(shù)本身作用域就是聲明時(shí)所在的作用域,與運(yùn)行時(shí)所在作用域無關(guān)

在定義時(shí)綁定作用域

var a = 1; var x = function () {console.log(a); };function f() {var a = 2;x(); }f() // 1

函數(shù)的參數(shù)  

可以省略,但沒辦法只省略靠前的參數(shù),而保留靠后的參數(shù),如果一定要省略靠前的參數(shù),只有顯式傳入undefined

參數(shù)傳遞對(duì)原值的影響

如果是原始類型的值,無影響,只是一份拷貝

如果傳入的是對(duì)象,則修改其屬性的話,原值會(huì)受到影響

但把對(duì)象整個(gè)替換掉,不會(huì)影響原始值,因?yàn)橄喈?dāng)于指向其他地址

同名參數(shù)

如果有同名參數(shù),則取最后出現(xiàn)的那個(gè)值

function f(a, a) {console.log(a); //a為最后一個(gè)a }f(1) // undefined 相當(dāng)于f(1,undefined)

?

arguments對(duì)象

由于js允許函數(shù)提供不定數(shù)目的參數(shù),所以需要一種機(jī)制,可以在函數(shù)體內(nèi)部讀取所有參數(shù),這就是arguments對(duì)象的由來

arguments對(duì)象包含函數(shù)運(yùn)行時(shí)所有參數(shù),使用類似數(shù)組

如果在非嚴(yán)格模式下還可以在函數(shù)內(nèi)部修改參數(shù)的值,嚴(yán)格模式下只讀

通過它的length屬性,可以判斷函數(shù)調(diào)用時(shí)到底帶了幾個(gè)參數(shù)

與數(shù)組關(guān)系:

是對(duì)象,不能使用數(shù)組方法,除非轉(zhuǎn)換為數(shù)組

var args = Array.prototype.slice.call(arguments);// 或者 var args = []; for (var i = 0; i < arguments.length; i++) {args.push(arguments[i]); }

arguments自帶一個(gè)callee屬性1,返回它所對(duì)應(yīng)的原函數(shù),可以用這個(gè)寫遞歸

arguments每個(gè)函數(shù)運(yùn)行時(shí)都有,無需顯式聲明

函數(shù)的閉包

閉包即能夠讀取其他函數(shù)內(nèi)部變量的函數(shù),可以簡(jiǎn)單理解為“定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”

用處:1.讀取函數(shù)內(nèi)部變量 2.記住誕生的環(huán)境

function createIncrementor(start) {return function () {return start++;}; }var inc = createIncrementor(5);inc() // 5 inc() // 6 inc() // 7

 3.封裝對(duì)象的私有屬性和方法,感覺像類 

function Person(name) {var _age;function setAge(n) {_age = n;}function getAge() {return _age;}return {name: name,getAge: getAge,setAge: setAge}; }var p1 = Person('張三'); p1.setAge(25); p1.getAge() // 25

立即調(diào)用的函數(shù)表達(dá)式,聲明時(shí)就調(diào)用(IIFE)

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

 所以以下寫法都行

var i = function(){ return 10; }(); true && function(){ /* code */ }(); 0, function(){ /* code */ }(); !function () { /* code */ }(); ~function () { /* code */ }(); -function () { /* code */ }(); +function () { /* code */ }();

通常只對(duì)匿名函數(shù)使用

目的:1.不必命名,避免污染全局變量 2。在IIFE內(nèi)部形成了一個(gè)單獨(dú)的作用域,可以封裝一些外部無法讀取的私有變量

eval命令?

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

eval('var a = 1;'); a // 1

如果無法執(zhí)行就報(bào)錯(cuò)

如果eval的參數(shù)不是字符串,那么會(huì)原樣返回

eval的作用域是當(dāng)前作用域,因此小心修改當(dāng)前作用域變量的值

eval本質(zhì)是在當(dāng)前作用域中注入代碼,由于安全風(fēng)險(xiǎn)和不利于js引擎優(yōu)化執(zhí)行速度,一般不推薦使用

最常用的場(chǎng)合是解析json數(shù)據(jù)的字符傳遞,不過正確做法應(yīng)該使用原生的JSON.parse方法

js規(guī)定,凡是使用別名執(zhí)行eval,eval內(nèi)部一律是全局作用域

var a = 1;function f() {var a = 2;var e = eval;e('console.log(a)'); }f() // 1

  

 

  

 

  

  

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/wtblogwt/p/10030250.html

總結(jié)

以上是生活随笔為你收集整理的js学习(4) 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品一区中文字幕乱码 | 不卡av免费观看 | 亲切的金子片段 | 黄色大片网站在线观看 | 欧美日韩国产一区 | 最近更新中文字幕 | 日本午夜网 | 黑人干日本少妇 | 51久久| 伊人网免费视频 | 美日韩一级 | 一级黄色大毛片 | 岳狂躁岳丰满少妇大叫 | 欧美性猛交xxxx黑人交 | 日韩av在线网址 | 日韩免费视频一区二区视频在线观看 | 丰满少妇被猛烈进入 | 日韩三级国产精品 | 国产亚洲制服欧洲高清一区 | 日韩欧美a级片 | 亚洲精品黄色 | 99激情视频| 温柔少妇的高潮呻吟 | 欧洲亚洲一区二区 | 亚洲精品www | 日韩精品电影一区 | 超碰免费成人 | 人妻熟妇又伦精品视频a | 色综合久久天天综合网 | 色狠狠操 | 内裤摩擦1v1h | 欧美v视频 | 日韩精品一区二区三 | 日韩精品无码一区二区 | 色臀 | 九色视频偷拍少妇的秘密 | 久久久久噜噜噜亚洲熟女综合 | 欧美人与禽zozzo性之恋的特点 | 深夜在线网站 | 国产高潮在线观看 | www.久久婷婷 | fee性满足he牲bbw | 国产亚洲精品美女久久久久 | 日韩在线视频你懂的 | 天天碰天天碰 | 大黑人交xxx极品hd | 国产精品8| 欧色丰满女同hd | 日本精品在线视频 | 日本肉体xxxx裸体137大胆图 | 色玖玖综合 | 丁香在线视频 | 天天夜夜操 | 国产在线999 | 国产精品自拍99 | 99热亚洲精品 | 他趴在我两腿中间添得好爽在线看 | 色哟哟免费在线观看 | 中文字幕免费在线观看视频 | 亚洲精品乱码久久久久久 | 亚洲天堂网一区 | 欧美色婷婷 | 少妇高潮久久久 | 黄色小说网站在线观看 | 男人天堂手机在线观看 | 久久亚洲电影 | 天天舔天天射天天干 | 尤物在线观看视频 | 性猛交富婆╳xxx乱大交麻豆 | 91av麻豆| 日本不卡123 | 免费成人在线视频观看 | 污污网站在线播放 | www色网站 | 色视av| 一集毛片 | 亚洲精品无 | 欧美一区二区三区在线观看 | 韩国三级视频在线 | aaaaa级少妇高潮大片免费看 | 日韩激情啪啪 | 日韩av手机在线 | 91视频国产免费 | 白浆av| 日本午夜电影网站 | 国产小毛片 | 超碰人人做 | 在线观看视频二区 | 操操操爽爽爽 | 亚洲综合五月天婷婷丁香 | 色屁屁一区二区三区视频 | 操老女人视频 | 亚洲国产毛片aaaaa无费看 | 国产无遮挡又黄又爽在线观看 | 女色综合| 丁香激情五月少妇 | 欧美a级在线免费观看 | 人妻精品一区二区在线 | a男人天堂 |