函数
定义
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
如有不对的地方欢迎大家指出,共同进步!