JavaScript小汇(4)——函数、变量作用域、方法

函数

定义

function abs(x){
    if (x>0) {
        return x;
    } else{
        return -x;
    }
}
abs(20);
>20
abs(-20);
>20

var num = function(x){
    if (x>0) {
        return x;
    } else{
        return -x;
    }
}
abs(12);
>12
abs(-12);
>12

手动抛出异常

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

var num = function(x){
    if (x>0) {
        return x;
    } else{
        return -x;
    }
}
abs('1');
>"1"

arguments

JS函数有个内置的对象 arguments 对象。

argument 对象包含了函数调用的参数数组,即输入的所有参数(显式声明和隐式声明)

function S(){
    var i,sum=0;
    for (let i =0;i<arguments.length;i++) {
        sum +=arguments[i];
    }
    console.log(sum);
}
var numS = S(1,2,3,4,5);
>15

rest

可以直接显示隐式传入的参数

function fu(x,y,...rest){
    console.log(rest);
}
fu(1,2,3,4,5,6);
>Array(4) [ 3, 4, 5, 6 ]

变量作用域

var定义的变量有作用域

function test(){
    var x = 2;
}
x=x+1;//x is not defined

内部函数可以使用外部函数的成员,反之不能

function test(){
    var x = 2;
    function test1(){
        var y = x+1;
    }
}
var z = y+1;//y is not defined

只要在不同的函数中,即使变量名相同也无所谓

function test2(){
    var x = 2;
}
function test3(){
    var x = 2;
}

当变量重名时,内部的变量会覆盖外部的同名变量

function test2(){
    var x = 1;
    function test3(){
        var x = 2;
        console.log('inner'+x);
    }
    console.log('outer'+x);
    test3();
}
test2();
>outer1
>inner2

变量声明会提前,赋值不会提前

function test4(){
    //相当于此处只是声明了var y;
    var x='x'+y;
    var y='y';
    console.log(x);
}
test4();
>xundefined

编写规范:将要用到的变量都提前声明,用的时候直接赋值即可

function test5(){
    var x,y,z,...;
    //用的时候直接赋值
    x = 2;
    y=x+2;
    //...
}

全局变量

var x = 1;
function test6(){
    console.log(x);
}
test6();
console.log(x);
>1
>1

全局对象 所有的全局变量都是window的对象

var x = 10;
console.log(window.x);
window.console.log(x);
>10
>10

降低全局命名冲突

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

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

局部变量 let

function pri(){
for (let i =0;i<10;i++) {
    console.log(i);//只能在此处使用
}
console.log(i+1);//Uncaught ReferenceError: i is not defined

常量 const

const PI = 3.14;
PI=3;
console.log(PI);//Uncaught TypeError: invalid assignment to const 'PI'

方法

定义

var Person={
    name:'wwww',
    birth:0000,
    age:function(){
        var now=new Date().getFullYear();
        return now-this.birth;
    }
}
Person.age();
>2021


function getAge(){
    var now=new Date().getFullYear();
    return now-this.birth;//this指的是window,window没有birth属性
};
var Person={
    name:'wwww',
    birth:0000,
    age:getAge
}
Person.age();//2021
getAge();//NaN

apply() 可以改变this指定的对象 方法.apply(要指向的对象,此方法的参数个数)

function getAge(){
    var now=new Date().getFullYear();
    return now-this.birth;
};
var Person={
    name:'wwww',
    birth:0000,
    age:getAge
}
getAge.apply(Person,[]);
>2021

如有不对的地方欢迎大家指出,共同进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值