锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

学习博客:【JavaScript】函数及方法

时间:2023-11-21 19:07:01 yl1雨量传感器

函数

1.定义函数

        //方式1         function abs(x){ 
                     if(x>=0){ 
                         return x;             }else{ 
                         return -x;             }         }          //方式2         var abs = function (x){ 
                     if(x>=0){ 
                         return x;             }else{ 
                         return -x;             }         }  

执行到return代表函数结束,否则返回NaN

function(x){…}是匿名函数,结果可以赋予abs,通过abs函数可以调用

2.调用函数

在这里插入图片描述

任以传输任何参数或不传输参数

3.抛出异常

var abs = function (x){ 
             //手动抛出异常     if(typeof x!== 'number'){ 
                 throw 'Not a Number';     }      if(x>=0){ 
                 return x;     }else{ 
                 return -x;     } } 

4.关键字arguments

所有传入的参数都是数组

for(var i = 0; i.length; i++){ 
          console.log(arguments[i]); } 

5.关键字rest(ES6引入)

获取已定义参数之外的所有参数

function xyz(a,b,...rest){ 
        
    console.log("a=>" + a);
    console.log("b=>" + b);
    console.log(rest);

}

rest参数只能写在最后,…rest

变量的作用域

在js中,var定义变量有作用域

在函数体中声明,在函数体外不可以使用(若想实现则需要闭包)

function yl(){ 
        
    var x = 1;
    x = x + 1;
}

x = x + 2;   //Uncaught ReferenceError: x is not defined

若两个函数使用了相同的变量名,只要在函数内部,就不冲突

function yl(){ 
        
    var x = 1;
    x = x + 1;
}

function yl1(){ 
        
    var x = "q";
    x = x + 1;
}

内部函数可以访问外部函数的成员,反之不能

    function yl(){ 
        
        var x = 1;

        function yl1(){ 
        
            var x = "q";
            console.log("内:" + x);
        }
        console.log("外:" + x);
        yl1()
    }
yl()

函数查找变量从自身函数开始,由内向外查找,若外部存此同名函数变量,则内部函数会屏蔽外部函数变量

function yy(){ 
        
    var x = 'x' + y;
    console.log(x);
    var y = 'y';
}
yy()

结果:xundefined

js执行引擎,自动提升了y的声明,但不会提升变量y的赋值

function yy(){ 
        
    var y;
    
    var x = 'x' + y;
    console.log(x);
    y = 'y';
}
yy()

先声明,放在函数头部,用的时候再定义,便于代码维护

1.全局变量

//全局变量
var x = 1;

function f(){ 
        
    console.log(x);
}

f();
console.log(x);

全局对象window

//全局对象
var x = "run";
alert(x);
alert(window.x);    //默认所有的全局变量,会自动绑定在window对象下

alert()这个函数本身也是一个window变量

//自定义函数可覆盖原来的函数
var old_alert = window.alert;

//自定义函数
window.alert = function(){ 
        

};
window.alert('hi');

//恢复原函数
window.alert = old_alert;
window.alert("hello");

js只有一个全局作用域,任何变量(包括函数)如果没有在函数作用范围内找到,就会向外查找,如果在全局作用域内都没有被找到,报错RefrenceError

2.规范

所有的全局变量绑定在window上,对于不同的js文件,使用相同的全局变量会发生冲突

//唯一全局变量
var yl = { 
        };

//定义全局变量
yl.name = 'yang';
yl.add = function (a, b){ 
        
    return a+b;
}

定义一个唯一的空间,将代码全部放入以降低全局命名冲突的问题

3.局部作用域let

function aaa(){ 
        
    for (var i = 0; i < 10; i++) { 
        
        console.log(i);
    }
    console.log(i+1);   //使用var关键字,i出了作用域还可以使用
}
aaa()

let关键字解决局部作用域冲突问题

function bbb(){ 
        
    for (let i = 0; i < 10; i++) { 
        
        console.log(i);
    }
    console.log(i+1);   //使用let关键字,i出了作用域不可以使用Uncaught ReferenceError: i is not defined

}
bbb()


4.常量

var PI = '3.14';

console.log(PI);
PI = '100';
console.log(PI);

ES6之后,引入常量关键字const

//只读变量 不可更改
const PI = '3.14';

console.log(PI);
PI = '100'; //报错
console.log(PI);

Uncaught TypeError: Assignment to constant variable.

方法

1.定义方法

var yl = { 
        
    name: "杨",
    birth: 2000,
    age:function (){ 
        
        var now = new Date().getFullYear();
        return now - this.birth;
    }
}
    yl.name;    //属性
    yl.age();   //方法
function getAge(){ 
        
    var now = new Date().getFullYear();
    return now - this.birth;
}

var yl = { 
        
    name: "杨",
    birth: 2000,
    age: getAge
}
yl.age();   //22
getAge();   //NaN

this默认指向调用它的那个对象

2.apply

在js中可以控制this的指向

getAge.apply(yl, []);   //this指向yl这个对象,参数为[]
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章