JS之ES5、ES6区别

ES5、ES6区别

定义变量

  • ES5定义变量用"var"关键字
  • ES6定义变量使用"let"关键字,也可以使用"const"定义常量

“var"与"let”、"const"的区别

  • "var"可以声明重复的变量
  • "let"和"const"声明的变量或常量不能重复声明
//"var"可以声明重复的变量
var num =100;
var num =200;
console.log(num);//=200

//"let"声明的变量不能重复声明
let n =100;
let n =200;//运行会直接报错

//"const"声明的变量不能重复声明
const m =100;
const m =200;//运行会直接报错
  • "var"声明的变量会进行预解析(可以在声明之前调用,只不过拿到的是undefined)
  • "let"和"const"声明的变量或常量不会进行预解析(声明之前不能调用)
//"var"声明的变量会进行预解析(可以在声明之前调用,只不过拿到的是undefined)
console.log(value1);//=undefined
var value1=100;
console.log(value1);//=100

//"let"声明的变量不会进行预解析(声明之前不能调用)
console.log(value2);//=直接报错
let value2 =100;
console.log(value2);//如果没有第一次输出,则能输出正确结果为 100

//"const"声明的常量不会进行预解析(声明之前不能调用)
console.log(value3);//=直接报错
const value3 =100;
console.log(value3);//如果没有第一次输出,则能输出正确结果为 100

  • "var"只被“函数”限定作用域
  • “let"和"const” 可以被任何一个可以书写代码的“{}”限制使用范围
//"var"只被“函数”限定作用域
function fun1(){
var num =100;
console.log(num);//=100
}
fun1();
console.log(num);//直接报错,因为num是函数内部的局部变量
if(true){
var num1=100;
console.log(num1);//=100
}
console.log(num1);//=100(只被“函数”限定作用域,不被大括号限定)

//"let"和"const" 可以被任何一个可以书写代码的“{}”限制使用范围
function fun2(){
let num2 =100;
const num3 = 100;
console.log(num2);//=100
console.log(num3);//=100
}
fun2();
console.log(num2);//直接报错,因为num是函数内部的局部变量
console.log(num3);//直接报错,因为num是函数内部的局部变量
if(true){
let num4=100;
const num5=100;
console.log(num4);//=100
console.log(num5);//=100
}
console.log(num4);//直接报错,因为num是{}内部的局部变量
console.log(num5);//直接报错,因为num是{}内部的局部变量

"let"与"const"的区别

  • “let” 可以在声明的时候不进行赋值
  • “const” 在声明的时候必须赋值
  • “let” 声明的变量可以重新赋值
  • “const” 声明的常量不可以更改(如果是引用类型,不可以修改引用地址,但可以修改地址内的数据)

ES6的箭头函数

是一种对函数表达式的简写(也就是我们说的赋值式函数),对声明式函数没有作用

  • 函数表达式
//自执行函数里面
(function(){})();
//赋值式函数
let fn = function(){}
//对象中的方法
const obj = {fun:function(){}}
//定时器处理函数
setTimeout(function(){});
//ES5中的一些数组方法
forEach(function(){});
//事件处理函数
addEventListener("click",function(){});

//我们的函数表达式一般都是匿名函数,匿名函数都可以使用箭头函数来简写
  • 箭头函数的语法
    • 没有了“function”关键字
    • ()=>{}
       let fn=()=>{
           console.log("我是fn函数");
       }
       fn();//=我是fn函数
    

    箭头函数的特性

    1. 箭头函数没有“this”
      • 箭头函数的this就是上下文(context),就是箭头函数外部作用域的this
    2. 箭头函数不受 call/apply/bind的影响
      • 箭头函数的this在定义的时候就已经决定好了,不能更改
    3. 箭头函数内部没有arguments
      • 箭头函数内部没有这个天生的变量
const fn = function fun(){
console.log(arguments); 
}
const fn1 = ()=>{
console.log(arguments); 
}
console.log(fn(1,2,3,4));//= [1,2,3,4]
console.log(fn1(1,2,3,4));//直接报错
  1. 箭头函数传递参数的时候
    • 如果只有一个形参,可以不写小括号
    • 如果没有形参,或者两个及以上形参,必须写小括号
const fn1 = a=>{
console.log(a); 
}
const fn2 = (a,b)=>{
console.log(a+b); 
}
const fn3 = ()=>{
console.log("没有参数"); 
}
console.log(fn1(1));//= 1
console.log(fn2(1,2));//=3
console.log(fn3());//=没有参数
  1. 箭头函数的函数体
    • 如果只有一句话,可以省略大括号,否则必须写大括号
    • 当省略大括号的时候,函数会自动return
const fn1 = a=>a+100; 
const fn2 = (a)=>{
return a+100; 
}
console.log(fn1(1));//= 101
console.log(fn2(1));//=101
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 支持向量机非线性回归通用MATLAB程序解析 #### 一、概述 本文将详细介绍一个基于MATLAB的支持向量机(SVM)非线性回归的通用程序。该程序采用支持向量机方法来实现数据的非线性回归,并通过不同的核函数设置来适应不同类型的数据分布。此外,该程序还提供了数据预处理的方法,使得用户能够更加方便地应用此程序解决实际问题。 #### 二、核心功能与原理 ##### 1. 支持向量机(SVM) 支持向量机是一种监督学习模型,主要用于分类和回归分析。对于非线性回归任务,SVM通过引入核技巧(kernel trick)将原始低维空间中的非线性问题转换为高维空间中的线性问题,从而实现有效的非线性建模。 ##### 2. 核函数 核函数的选择直接影响到模型的性能。本程序内置了三种常用的核函数: - **线性核函数**:`K(x, y) = x'y` - **多项式核函数**:`K(x, y) = (x'y + 1)^d` - **径向基函数(RBF)**:`K(x, y) = exp(-γ|x - y|^2)` 其中RBF核函数被广泛应用于非线性问题中,因为它可以处理非常复杂的非线性关系。本程序默认使用的是RBF核函数,参数`D`用于控制高斯核函数的宽度。 ##### 3. 数据预处理 虽然程序本身没有直接涉及数据预处理的过程,但在实际应用中,对数据进行适当的预处理是非常重要的。常见的预处理步骤包括归一化、缺失值处理等。 ##### 4. 模型参数 - **Epsilon**: ε-insensitive loss function的ε值,控制回归带宽。 - **C**: 松弛变量的惩罚系数,控制模型复杂度与过拟合的风险之间的平衡。 #### 三、程序实现细节 ##### 1. 函数输入与输出 - **输入**: - `X`: 输入特征矩阵,维度为(n, l),其中n是特征数量,l是样本数量。 - `Y`: 目标值向量,长度为l。 - `Epsilon`: 回归带宽。 - `C`: 松弛变量的惩罚系数。 - `D`: RBF核函数的参数。 - **输出**: - `Alpha1`: 正的拉格朗日乘子向量。 - `Alpha2`: 负的拉格朗日乘子向量。 - `Alpha`: 拉格朗日乘子向量。 - `Flag`: 标记向量,表示每个样本的类型。 - `B`: 偏置项。 ##### 2. 核心代码解析 程序首先计算所有样本间的核矩阵`K`,然后构建二次规划问题并求解得到拉格朗日乘子向量。根据拉格朗日乘子的值确定支持向量,并计算偏置项`B`。 - **核矩阵计算**:采用RBF核函数,通过`exp(-(sum((xi-xj).^2)/D))`计算任意两个样本之间的相似度。 - **二次规划**:构建目标函数和约束条件,使用`quadprog`函数求解最小化问题。 - **支持向量识别**:根据拉格朗日乘子的大小判断每个样本是否为支持向量,并据此计算偏置项`B`。 #### 四、程序扩展与优化 - **多核函数支持**:可以通过增加更多的核函数选项,提高程序的灵活性。 - **自动调参**:实现参数自动选择的功能,例如通过交叉验证选择最优的`Epsilon`和`C`值。 - **并行计算**:利用MATLAB的并行计算工具箱加速计算过程,特别是当样本量很大时。 #### 五、应用场景 该程序适用于需要进行非线性回归预测的场景,如经济预测、天气预报等领域。通过调整核函数和参数,可以有效应对各种类型的非线性问题。 ### 总结 本程序提供了一个支持向量机非线性回归的完整实现框架,通过灵活的核函数设置和参数调整,能够有效地处理非线性问题。对于需要进行回归预测的应用场景,这是一个非常实用且强大的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司军礼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值