函数
- 定义一:function 函数名(参数){函数体};
- 定义二:let 函数名=function(参数){函数体};
//函数定义
function abs1(x) {
if (x>=0){
return x;
}else {
return -x;
}
}
//匿名函数,把匿名函数赋值给abs2,即可以通过abs2来调用
let abs2 =function(x) {
if (x>=0){
return x;
}else {
return -x;
}
}
- 一旦执行return语句,则函数执行结束返回结果,若没有return,则返回undefined。
- 调用函数
- JavaScript并不会因为所传参数和定义参数在类型、个数上不同而报错,需要手动做异常检测和处理。
- 可以通过arguments取得函数调用时传入的所有参数,arguments是一个数组。
- 可以通过rest来获取除了已经定义的参数外的额外参数(比如定义两个参数而传入五个参数,则rest为后面三个参数组成的数组);需要在函数定义时在最后添加…rest参数,只能放在最后。
abs1(10);//10
abs1(-10);//10
abs1(10,20,100);//10
function f(a,b,...rest) {
}
变量的作用域
- 在JavaScript中 var定义变量实际是有作用域的。
- 在函数体中用var或let声明的变量,在函数外是不能使用的
function f() {
var x=1;
x+=1;
}
f();
x+=2;//Uncaught ReferenceError: x is not defined
- 在两个函数内分别定义同名变量,由于都是函数内的局部变量,并不会产生冲突
- 函数内部的函数,可以访问外部函数的变量;反之不可以
//内部函数可以访问外部函数的变量
function f1() {
let x=0;
f2();
function f2() {
alert(x);//输出0
}
}
- 以下代码会报错:应该是内部函数中存在x的声明,所以alert语句中会把x当成内部函数的局部变量而执行alert语句时x又没有被声明。
function f1() {
let x=0;
f2();
alert(x);
function f2() {
alert(x);//Uncaught ReferenceError: Cannot access 'x' before initialization
let x=1;
}
}
f1();
- 在内外函数均有一个同名函数的声明时,内外函数的变量相互独立
function f1() {
let x=0;
f2();
alert(x);//0
function f2() {
let x=1;
alert(x);//1
}
}
f1();
- 全局变量
//全局变量
let x=0;
function f() {
alert(x);//0
}
- 所有全局变量都会被绑定在全局对象window下:
let a= 123;
alert(a);//123
alert(window.a);//123
- alert本身也是一个window变量(在全局下声明的函数也是)
//即使window自己也是自己的一个对象
window.window.window.alert(123);
- 规范:由于所有全局变量都会绑定到全局对象下,如果不同的js文件使用了同名的全局变量,则会产生冲突,如何能够减少冲突?
- 可以把自己的变量全部放在自己定义的唯一命名空间中,即可降低命名空间冲突的问题
var hyx={};
hyx.name="hou"
- 局部作用域 let
for (var x=1;x<100;x++){
}
for (let y=1;y<100;y++){
}
alert(x);//输出100
alert(y);//抛出异常 y未定义
- 常量 const
var PI=3.1415926;
const Pi=3.1415926;
PI=3;//其实可以改变
Pi=3;//不可改变,直接报错Uncaught TypeError: Assignment to constant variable.
方法
- 方法就是放在对象内的函数,对象中只有两个东西:属性和方法
function getAge() {
let now =new Dat().getFullYear();
return now-this.brith;
}
let hyx={
name:"hyx",
brith:1998,
age:getAge()
}
hyx.age();//22
getAge();//报错 this指向调用者,这里是window window没有brith
getAge().apply(hyx,[]);//被动调用
内部对象
标准对象
typeof 132;//number 整数小数等均为number
typeof '123';//string 单引号、双引号反引号包裹的内容均为字符串
typeof true;//boolean
typeof NaN;//number NaN为number类型
typeof [];//object 数组为object类型
typeof {};//object 对象为object类型
typeof Math.abs();//function 函数类型
typeof undefined;//undefined
typeof null;//object
- Date
let date =new Date();
date.getFullYear();//年
date.getMonth();//月 0~11
date.getDate()//日
date.getDay()//周几
date.getHours()//时
date.getMinutes();//分
date.getSeconds();//秒
date.getTime();//时间戳 1970年1月1日0:00到现在的毫秒数
new Date(215616165)//通过时间戳获取时间
date.toxxxxString()//转化为某时区的时间:返回字符串
- JSON
- JSON(JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式。
- 简介和清晰的层次结构使得JSON成为理想的数据交换语言。
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
- 在JavaScript中,一切皆为对象,任何js支持的类型都可以用JSON来表示
- 格式:
* 对象{}
* 数组[]
* 所有的键值对,都是用key:value
let user={
name:'hyx',
age:18
}
//对象转化为JSON字符串
let jsonUser=JSON.stringify(user);
//转化回对象
let user1=JSON.parse(jsonUser);
console.log(user1);//正确显示和user一样的对象
- Ajax
- 原生的js写法 xhr 异步请求
- jQuey封装好的方法 $("#name").ajax("")
- axios请求