1. 程式人生 > 其它 >Javascript基礎(2)

Javascript基礎(2)

Javascript基礎(2)

1、函式

JavaScript中的函式使用起來非常隨意

在進行引數傳遞時,引數少了,以及多了都不會進行報錯。

var abc=function (x){
    if(typeof x!="number")
        throw 'not a number';
    if(x>=0){
        return x;
    }
    else{
        return -x;
    }

}
2、arguments

arguments是js免費贈送的關鍵字,代表傳遞進來的所有引數,是一個數組。

   var abc=function (x){

       if(arguments.length>1)
       {

           console.log("x="+arguments[0]);
           for (let i=1;i<arguments.length;i++){
               console.log(arguments[i]);
           }
       }

       if(typeof x!="number")
           throw 'not a number';
       if(x>=0){
           return x;
       }
       else{
           return -x;
       }
   }

注意:arguments中包含所有的引數,我們有的時候想使用多個引數來進行附加操作時,需要排除已經有的引數

3、rest

​ ES6引入的新特性,獲取除了已定義的引數之外的所有引數

var xyz=function (a,b,...rest){
    console.log(a);
    console.log(b);
    console.log(rest);
    return;
}
4、變數的作用域
  • 在函式內部使用var定義變數,變數的作用域在函式內,在函式外不可以使用

  • 使用var定義在外部的變數就是在全域性變數上,alert(window.x);

  • js只有一個全域性作用域,就是在window下,任何(函式也可以是視為變數),都在window下

    window.alert=function(){
        
    }
    window.alert(123);
    //這的window.alert失效了
    window.alert=old_alert;
    window.alert(456);
    //這裡又成功了
    
  • 函式外部可以訪問內部的變數,內部不可以訪問外部的變數

    function aaa(){
        alert x=0;
        console.log(y);//可以
        function bbb(){
            alert y=0;
            console.log(x);//不可以
            return;
        }
        return;
    }
    
  • js中的宣告變數都會被提前,但是賦值不會被提前

    var x;
    ...
    ...
    var y=1;
    等同於
    var x;
    var y;
    ...
    ...
    y=1;
    
  • JavaScript實際上只有一個全域性作用域,任何變數(包括函式)都會先在函式作用域內尋找,尋找不到在到全域性,window下尋找

5、弊端

由於採用這樣的這樣的繫結全域性變數的方法,如果不同的全域性變數採用了不同的全域性變數方法,就會產生衝突,如何降低命名衝突的問題

var kuangsheng={};//定義一個全域性變數
kuangsheng.name="kuangshen";
kuangsheng.add=function(a,b){
    return a+b;
}

把需要使用的全域性變數放到自己定義的唯一的名稱空間中,降低全域性命名儲存

6、區域性作用域
for(let i;i<100;i++){
}
//i出了for迴圈就不可以使用
7、常量const

ES6才提出

const PI='3.14';
//只讀
8、方法

方法就是把函式放在物件的內部,物件裡面只有兩個東西,屬性和方法

var kuangs={
    name:'hejin',
    birth:2000,
    getAge:function(){
        var now=new Date().getFullYear();
        return now-this.birth;
    }
}

方法一定要帶括號

9、JOSN

在JavaScript中一切物件都可以轉換為JOSN的型別:
物件都用:{}

陣列都用:[ ]

所有鍵值對都用Key:value

JavaScript和JOSN想互轉換

var jsonUser=JSON.stringify(user);
var obj=JOSN.parse('{"name":"qingjiang","age":3}');