javascript
前端逼死强迫症系列之javascript续集
一、javascript函數(shù)
1.普通函數(shù)?
function func(){ }2.匿名函數(shù)
setInterval(function(){console.log(123); },5000)3.自執(zhí)行函數(shù)
多數(shù)情況下可能會引入別人的js,如果別人的js函數(shù)重復(fù),會導(dǎo)致一個不能用,為了避免這個問題,把內(nèi)部所有的功能放到函數(shù)里面。做成一個嵌套函數(shù)。
但是如果外面的函數(shù)名也有重復(fù),怎么處理,就外邊的函數(shù)沒有名字,并且自動執(zhí)行一下。
自執(zhí)行函數(shù)怎么寫呢?
// ()():第一個括號function,第二個括號傳實(shí)參。創(chuàng)建函數(shù),并且自動執(zhí)行 (function(arg){console.log(arg); })(1)二、javascript序列化及轉(zhuǎn)義
- 常用的序列化操作
- 轉(zhuǎn)義
比如網(wǎng)上搜一個東西,網(wǎng)址自動變成了%等一些內(nèi)容
> url = "https://www.sogou.com/web?query=時間" < "https://www.sogou.com/web?query=時間" > newUrl = encodeURI(url) // 轉(zhuǎn)義 < "https://www.sogou.com/web?query=%E6%97%B6%E9%97%B4" > decodeURI(newUrl) // 轉(zhuǎn)回原格式 < "https://www.sogou.com/web?query=時間" > newUrl = encodeURIComponent(url) // 全部轉(zhuǎn)義 < "https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E6%97%B6%E9%97%B4"默認(rèn)http請求不是長鏈接,連一次就斷了,但是網(wǎng)站有保持登錄一個月,怎么實(shí)現(xiàn)的。
一般登錄成功后,網(wǎng)站會給你發(fā)一段字符串過來,把它保存在硬盤的某個地方。這就是cookie。
客戶端(cookie) =》 服務(wù)器端 。 將數(shù)據(jù)經(jīng)過轉(zhuǎn)義后,保存在cookie
escape( ) // 對字符串轉(zhuǎn)義 unescape( ) // 給轉(zhuǎn)義字符串解碼 URIError // 由URl的編碼和解碼方法拋出三、eval以及時間操作
- eval
在Python中:
val = eval(" 1+1 ") # 表達(dá)式 exec(" 執(zhí)行代碼 ") # 比如for循環(huán)。但exec只是執(zhí)行,沒有返回值在JavaScript中:
eval :功能是python里eval和exec的合集
- 時間操作
四、javascript作用域
1.javascript以函數(shù)作為作用域(let除外)
- java、c、c# 等語言是以“{}”代碼塊 作為作用域的。
- Python中:作用域是以函數(shù)作為作用域的。
- JavaScript:也是以函數(shù)作為作用域的
2.函數(shù)的作用域在函數(shù)未被調(diào)用之前,已經(jīng)創(chuàng)建
3.函數(shù)的作用域存在作用域鏈,并且也是在被調(diào)用之前創(chuàng)建
作用域鏈:嵌套函數(shù),作用域一層套一層
以下三個示例,分別會輸出什么?
// 示例一:xo = "alex";function func(){// var xo = 'eric';function inner(){// var xo = 'tony';console.log(xo);}inner()}func()// 示例二:xo = "alex";function func(){var xo = 'eric';function inner(){console.log(xo);}return inner;}var ret = func()ret()// 示例三:xo = "alex";function func(){var xo = 'eric';function inner(){console.log(xo);}var xo = 'tony';return inner;}var ret = func()ret() // 注:瀏覽器console中換行,使用shift+回車函數(shù)的作用域存在作用域鏈,并且也是在被調(diào)用之前創(chuàng)建
4.函數(shù)內(nèi)部變量 聲明提前
// 示例一:function func(){console.log(xxoo);}func();// 程序直接報(bào)錯function func(){console.log(xxoo);var xxoo = 'alex';}// 解釋過程中:var xxoo;func();// undefined未賦值變量,提前聲明為 undefined
> var fgf undefined > fgf undefined五、javascript面向?qū)ο?/h2> - this代指對象(python self)
- 創(chuàng)建對象時, new 函數(shù)名()
function Foo(n){this.name = n;this.sayName = function(){console.log(this.name);}
}var obj1 = new Foo('we');
obj1.name
obj1.sayName()var obj2 = new Foo('wee');
obj2.name
obj2.sayName()
上面那么寫可以,但是有個問題,里面有些內(nèi)容被重復(fù)定義了,sayName這個方法在每個對象里都被重復(fù)定義了一次。
- Python的面向?qū)ο?#xff1a;方法保存在類內(nèi)存中
- JavaScript面向?qū)ο?—> 原型:
原型:避免浪費(fèi)內(nèi)存資源
function Foo(n){this.name = n; } // Foo的原型 Foo.prototype = {'sayName': function(){console.log(this.name)} }obj1 = new Foo('we'); obj1.sayName()obj2 = new Foo('wee');六、javascript 詞法分析解析
如下代碼,分別會對應(yīng)輸出什么?
function t1(age){console.log(age); // function age()var age = 27;console.log(age); // 27function age(){} // 執(zhí)行時,因?yàn)闆]有調(diào)用,所以執(zhí)行時不考慮console.log(age); // 27}t1(3);active object ——> 簡稱AO?
1. 形式參數(shù)?
2. 局部變量?
3. 函數(shù)聲明表達(dá)式(優(yōu)先級比較高)?
下面開始分析:
- 形式參數(shù):?
AO.age = 3; - 局部變量:?
AO.age = 27; - 函數(shù)聲明表達(dá)式?
AO.age = function()
作用域值的分析,也可以通過詞法分析,去分析
?
轉(zhuǎn)載于:https://www.cnblogs.com/lixiaoliuer/p/7154463.html
總結(jié)
以上是生活随笔為你收集整理的前端逼死强迫症系列之javascript续集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot 整合jsp过程中的
- 下一篇: redis.conf 常见配置介绍