函数
1.函数定义
java中
public 返回值类型 方法名(){
reture 返回值;
}
js中
function 方法名(){
return 返回值;
}
或者
var abs = function(x){
return 返回值;
}
//定义函数,定义绝对值函数
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
2.函数调用
abs(10)//调用x为10
js可以传任意参数,也可以不传递参数
手动抛出异常
typeof x! ==‘number’
function abs(x){
if(typeof x!=='number'){
throw 'not a number';
}
if(x>=0){
return x;
}else{
return -x;
}
- 参数存在多个
因为js不限定参数的问题,所以有以下两个特性
argument //关键字,代表传递进来的所有参数是一个数组、
//通过该关键字可以拿到所有的参数
和
rest //es6新特性,获取除了已经定义的参数之外的所有参数
用arguement获取除去这两个参数意外的参数
//多个参数
function fun(a,b){
console.log("a=>"+a);
console.log("b=>"+b);
}
//存在两个参数,用arguement获取除去这两个参数以外的参数
if (arguments.length>2){
for(var i = 2;i<arguments.length;i++){
console.log(argument[i]);
}
}
在参数后增加伪函数…rest,取除了已经定义的参数之外的所有参数,rest参数必须写在最后面
//多个参数,在参数后增加伪函数...rest
function fun(a,b,...rest){
console.log("a=>"+a);
console.log("b=>"+b);
console.log(rest);
}
3.变量的作用域
var定义的变量是有作用域的。
在函数体中的声明在函数体外不可以使用。
若两个函数使用了相同的变量名,只要在函数内部就不冲突
function fun(){
var x= 1;
var m= 1;
}
function fun2(){
var x= 1;//相同的变量名不冲突
}
内部类可以访问外部类的所有成员,外部类不能访问内部类的成员如下
function fun(){
var x= 1;
//内部类可以访问外部类的所有成员
function fun2(){
var y=x+ 1;//2
}
//外部类不能访问内部类的成员
var z=y+1;//error
}
js中函数变量查找,有自身变量开始向外查找,假设外部存在这个同名的变量,则内部函数屏蔽外部函数的变量用自己的。
js自动提升了y的声明,不提升y的赋值,如下代码
function fun(){
var x= "x"+y; // 等价于var y;
console.log(x);// var x= "x"+y;
var y = "y"; // console.log(x);
}
输出结果xundefine
- 故而,写js时将所有的变量定义都放在函数的头部,便于代码维护。
例如
var x=1,
y=x+11,
z,i,a;
全局变量,默认所有的全局变量都绑定在window对象下,js只有一个全局作用域,包含任何全局变量(函数也可以视为变量)。
var x = 'ooo';
alert(x);
alert(window.x);//与上边代码是同样的效果
window.alert(x);//alert()本身也是window的一个变量,与上边的效果相同
由于都绑定在一个作用域下,为了减少不同js文件下的冲突,将全局变量绑定在自己定义的对象下,例如
//唯一全局变量
var mms = {};
//定义全局变量
mms.name = 'dd';
mms.add = function(a,b){
return a+b;
}
将自己的定义的全局变量全部放在自己定义的唯一空间内,降低全局命名冲突的问题 >>jQuery
局部作用域 let
解决局部作用域冲突的问题,建议用let定于局部作用域的变量
常量 const
es6之前只要全部由大写字母命名的变量就是常量,建议不要修改这样的值。
es6引入了常量关键字‘const’,无法更改了
//常量
const PI = '3.14';
console.log(PI);
PI = '5';
console.log(PI);
4.方法的定义和调用
类与方法的区别
- 类是具有相同的属性和方法的集合。
- .对象是类中具体一个实例。
类是一种抽象的,并不实际存在的,表示一种事物共有特征的描述。
对象是一种具体的,实际存在的,类中的某一个个体。
方法(method): 当将函数和对象合写在一起时,函数就变成了 “方法”(method)// 当函数赋值给对象的属性,我们称为"方法"
调用方法需要带括号(yum.age() )
而对象包含两个东西:属性和方法
//方法
var yum = {
name:'mn',
birth:2020,
age:function(){
var now = new Date().getFullYear();
return now-this.birth;
}
}
this
this永远指向其所在函数的真实调用者;如果没有调用者,就指向全局对象window。
apply
在js中可以控制this指向
5.内部对象
①创建Date对象new Date()
var now = new Date();
console.log(now);
https://www.runoob.com/jsref/jsref-obj-date.html
Date对象的方法常见:
now.getFullYear();
now.getDate();
now.getMonth();
//get一个时间戳
now.getTime();
时间戳世界统一 1970 1.1 0:00:00世界统一
console.log(new Date(时间戳));
获得当前时间(时间戳转为时间)
②JSON
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 是 JS 对象的字符串表示法。
在js中一切皆为对象,任何js支持的类型都可以用json来表示
格式:
- 对象都用{}
- 数组都用[]
- 所有的键值对都用key:value
JSON.parse() | 用于将一个 JSON 字符串转换为 JavaScript 对象。 |
---|---|
JSON.stringify() | 用于将 JavaScript 值转换为 JSON 字符串。 |
var obj = JSON.parse('{"a": "Hello", "b": "World"}');
//结果是 {a: 'Hello', b: 'World'} 一个对象
var json = JSON.stringify({a: 'Hello', b: 'World'});
//结果是 '{"a": "Hello", "b": "World"}' 一个JSON格式的字符串