1. 程式人生 > >前端逼死強迫癥系列之javascript續集

前端逼死強迫癥系列之javascript續集

普通 target sogo prototype 所有 string encodeuri java 常用

一、javascript函數

1.普通函數

function func(){
}

2.匿名函數

setInterval(function(){
    console.log(123);
},5000)

3.自執行函數

多數情況下可能會引入別人的js,如果別人的js函數重復,會導致一個不能用,為了避免這個問題,把內部所有的功能放到函數裏面。做成一個嵌套函數。

但是如果外面的函數名也有重復,怎麽處理,就外邊的函數沒有名字,並且自動執行一下。

自執行函數怎麽寫呢?

//  ()():第一個括號function,第二個括號傳實參。創建函數,並且自動執行
(function(arg){
    console.log(arg);
})(1) 

二、javascript序列化及轉義

  • 常用的序列化操作
li = [11,22,33,44]
s = JSON.stringify(li)    // 把對象轉化為字符串
newL = JSON.parse(s)    // 把字符串轉化為對象
  • 轉義

比如網上搜一個東西,網址自動變成了%等一些內容

>  url = "https://www.sogou.com/web?query=時間"
<  "https://www.sogou.com/web?query=時間"
>  newUrl = encodeURI(url)                 // 轉義
<  "https:
//www.sogou.com/web?query=%E6%97%B6%E9%97%B4" > decodeURI(newUrl) // 轉回原格式 < "https://www.sogou.com/web?query=時間" > newUrl = encodeURIComponent(url) // 全部轉義 < "https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E6%97%B6%E9%97%B4"

默認http請求不是長鏈接,連一次就斷了,但是網站有保持登錄一個月,怎麽實現的。

一般登錄成功後,網站會給你發一段字符串過來,把它保存在硬盤的某個地方。這就是cookie。

客戶端(cookie) =》 服務器端 。 將數據經過轉義後,保存在cookie

escape( )          // 對字符串轉義
unescape( )        // 給轉義字符串解碼
URIError           // 由URl的編碼和解碼方法拋出

三、eval以及時間操作

  • eval

在Python中:

val = eval(" 1+1 ")    # 表達式
exec(" 執行代碼 ")      # 比如for循環。但exec只是執行,沒有返回值

在JavaScript中:

eval :功能是python裏eval和exec的合集

  • 時間操作
>  d = new Date()
Mon Nov 28 2016 22:46:33 GMT+0800 (中國標準時間)
>  d.getMinutes()
46
>  n = d.getMinutes() + 12
58
>  d.setMinutes(n)
1480345113329
>  d
Mon Nov 28 2016 22:58:33 GMT+0800 (中國標準時間)

//        Date類
//        var d = new Date()   當前時間 
//        d.getXXX  獲取
//        d.setXXX  設置

四、javascript作用域

1.javascript以函數作為作用域(let除外)

  • java、c、c# 等語言是以“{}”代碼塊 作為作用域的。
  • Python中:作用域是以函數作為作用域的。
  • JavaScript:也是以函數作為作用域的

2.函數的作用域在函數未被調用之前,已經創建

3.函數的作用域存在作用域鏈,並且也是在被調用之前創建

作用域鏈:嵌套函數,作用域一層套一層

以下三個示例,分別會輸出什麽?

// 示例一:
            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+回車       

函數的作用域存在作用域鏈,並且也是在被調用之前創建

4.函數內部變量 聲明提前

  // 示例一:
        function func(){
            console.log(xxoo);
        }
        func();
        // 程序直接報錯

        function func(){
            console.log(xxoo);
            var xxoo = ‘alex‘;
        }
        // 解釋過程中:var xxoo;
        func();
        // undefined

未賦值變量,提前聲明為 undefined

>  var fgf
undefined
>  fgf
undefined

五、javascript面向對象

  • this代指對象(python self)
  • 創建對象時, new 函數名()
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()

上面那麽寫可以,但是有個問題,裏面有些內容被重復定義了,sayName這個方法在每個對象裏都被重復定義了一次。

  • Python的面向對象:方法保存在類內存中
class Foo:
    def __init__(self,name):
        self.name = name

    def sayName(self):
        print(self.name)

obj1 = Foo(‘we‘)
obj2 = Foo(‘wee‘)
  • JavaScript面向對象 —> 原型:

原型:避免浪費內存資源

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 詞法分析解析

如下代碼,分別會對應輸出什麽?

 function t1(age){
            console.log(age);   // function age()
            var age = 27;
            console.log(age);   // 27
            function age(){}    // 執行時,因為沒有調用,所以執行時不考慮
            console.log(age);   // 27
        }

        t1(3);

active object ——> 簡稱AO
1. 形式參數
2. 局部變量
3. 函數聲明表達式(優先級比較高)


下面開始分析:

  • 形式參數:
    AO.age = 3;
  • 局部變量:
    AO.age = 27;
  • 函數聲明表達式
    AO.age = function()

作用域值的分析,也可以通過詞法分析,去分析

前端逼死強迫癥系列之javascript續集