JS语法 -- 函数及异常

基础常用JS函数和语法集合大全 基础常用JS函数和语法集合大全,包含平时web开发中常用到的JS函数。对平时容易混淆,使用不清楚的函数,一看便知,轻松掌握。 立即下载

函数

function 函数名(参数列表) {
	函数体;
	return 返回值;
}

function add(x,y){
	return x+y;
}
console.log(add(3,5));

函数表达式

使用表达式来定义函数,表达式中的函数名可以省略,如果这个函数名不省略,也只能用在此函数内部

匿名函数

const add = function(x, y){
	return x + y;
};
console.log(add(4, 6)

有名字的函数表达式

const sub = function fn(x, y) {
    return x -y;
}
console.log(sub(5, 3))
// console.log(fn(3, 2)) // fn 只能用在函数内部
  • 内部使用,相当于递归调用
const sub = function fn(n) {
    if (n===1) return n;
    return n + fn(--n) // fn 只能在函数内部使用
}
console.log(sub(4))

函数、匿名函数、函数表达式的差异

  • 函数和匿名函数,本质上都是一样的,都是函数对象,只不过函数有自己的标识符——函数名,匿名函数需要借助其它的标识符而已
  • 区别在于,函数会声明提升,函数表达式不会
console.log(add(4,6))
// 匿名函数
function add(x, y){ // 声明提升
    return x + y;
};

// console.log(sub(5, 3)); // sub 未定义
// 有名字的函数表达式
const sub = function (x,y){
    return x - y;
};
console.log(sub(5, 3));

高阶函数

高阶函数:函数作为参数或返回一个函数

  • 完成一个计数器counter
const counter = function(){
    let c = 0
    return function(){
        return ++c;
    };
};

const c = counter()
console.log(c()) // 1
console.log(c()) // 2
console.log(c()) // 3
  • 完成一个map函数:可以对某一个数组的元素进行某种处理
const map = function(arr,fn){
    let newarr = [];
    for (let i in arr){
        newarr[i] = fn(arr[i]);
    }
    return newarr
}

console.log(map([1,2,3,4], function(x) {return x++}))
console.log(map([1,2,3,4], function(x) {return ++x}))
console.log(map([1,2,3,4], function(x) {return x+1}))
console.log(map([1,2,3,4], function(x) {return x+=1}))

// 执行结果
[ 1, 2, 3, 4 ]
[ 2, 3, 4, 5 ]
[ 2, 3, 4, 5 ]
[ 2, 3, 4, 5 ]

另附counter的生成器版本,仅供参考

const counter = (function * () {
    let c = 1
    while (true) {
         yield c++
    }
})()

console.log(counter.next())
console.log(counter.next())
console.log(counter.next())

// 执行结果
{ value: 1, done: false }
{ value: 2, done: false }
{ value: 3, done: false }

箭头函数

箭头函数就是匿名函数,它是一种更加精简的格式。
将上例中的函数更改为箭头函数

const map = function(arr,fn){
    let newarr = [];
    for (let i in arr){
        newarr[i] = fn(arr[i]);
    }
    return newarr
}

// 以下三行等价
console.log(map([1,2,3,4], (x) => {return x*2}));
console.log(map([1,2,3,4], x => {return x*2}));
console.log(map([1,2,3,4], x => x*2));

// 执行结果
[ 2, 4, 6, 8 ]
[ 2, 4, 6, 8 ]
[ 2, 4, 6, 8 ]

箭头函数参数

  • 如果一个函数没有参数,使用()
  • 如果只有一个参数,参数列表可以省略小括号()
  • 多个参数不能省略小括号,且使用逗号间隔

箭头函数返回值

  • 如果函数体部分有多行,就需要使用{},如果有返回值使用return
  • 如果只有一行语句,可以同时省略大括号和return
  • 只要有return语句,就不能省略大括号
    console.log(map([1,2,3,4], x => {return ++x})) ,有return必须有大括号
  • 如果只有一条非return语句,加上大括号,函数就成了无返回值
    console.log(map([1,2,3,4], x => {x*2}));加上了大括号,它不等价于x =>{return x*2}
    因此,记住 x => x*2 这种正确的形式就行

函数参数

普通参数

  • 一个参数占一个位置,支持默认参数
const add = (x, y) => x + y
console.log(add(4, 5)) // 9

// 缺省值
const add1 = (x, y=5) => x + y
console.log(add1(4, 7)) // 11
console.log(add1(4)) // 9

测试下面代码

const add = (x=6, y) => x + y

console.log(add()) // NaN
console.log(add(1)) // NaN
console.log(add(y=2, z=3)) // 5
console.log(add(3, 4, 5, 6)) // 7

观察上面diamagnetic执行结果,原因

  1. JS中并没有Python中的关键字传参
  2. JS只是做参数位置的对应
  3. JS并不限制默认参数的位置
  4. JS传参个数超范围,多余的参数不影响函数调用

add2(y=2,z=3)相当于add2(2,3),因为JS没有关键字传参,但是它的赋值表达式有值值,y=2就是2,z=3就是3
建议,默认参数写到后面,这是一个好的习惯

可变参数(rest parameters剩余参数)

JS使用…表示可变参数(Python用*收集多个参数)

const sum = function (...args){
    let result = 0;
    console.log(...args) // 3 6 9 参数解构
    for (let x in args){
        result += args[x]
    };
    return result
};

console.log(sum(3, 6, 9)) // 18

arguments对象

函数的所有参数会被保存在一个arguments的键值对对象中

(function (p1, ...args) {
    console.log(p1)
    console.log(args)
    console.log('----------------')
    console.log(arguments) // 对象
    for (let x of arguments) // 该对象可以使用of
        console.log(x);
})('abc', 1,3,5)
   
// 执行结果
abc
[ 1, 3, 5 ]
----------------
[Arguments] { '0': 'abc', '1': 1, '2': 3, '3': 5 }
abc
1
3
5

ES6之前,arguments是唯一可变参数的实现。
ES6开始,不推荐,建议使用可变参数。为了兼容而保留。
注意,使用箭头函数,取到的arguments不是我们想要的,如下

((x, ...args) => {
    console.log(args);
    console.log(x);
    console.log(arguments);
})(...[1,2,3,4])

在这里插入图片描述

参数解构

和Python类似,Js提供了参数解构,依然使用了...符号来解构

const add = (x, y) => {console.log(x,y);return x + y};
console.log(add(...[100,200]))
console.log(add(...[100,200,300,3,5,3]))
console.log(add(...[100]))

Js支持参数解构,不需要解构后的值个数和参数个数对应

函数返回值

python 中可以使用 return 1,2 返回多值,本质上也是一个值,就是一个元组。Js中呢

const add = (x, y) => {return x,y};
console.log(add(4,100)); // 100

表达式的值

  • 类C的语言,都有一个概念——表达式的值
  • 赋值表达式的值:等号右边的值
  • 逗号表达式的值:类C语言,都支持逗号表达式,逗号表达式的值,就是最后一个表达式的值
a = (x = 5, y = 6, true);
console.log(a); //true

b = (123, true, z = 'test')
console.log(b) // test

function c() {
    return x = 5, y = 6, true, 'ok';
}

console.log(c()); // ok

所以,JS的函数返回值依然是单值

作用域

// 函数中变量的作用域
function test(){
    a = 100;
    var b = 200; 
    let c = 300;
}
    
// 先要运行test函数
test()
console.log(a);
// console.log(b); // 不可见
// console.log(c); // 不可见

 // 块作用域中变量
if (1){
    a = 100; 
    var b = 200; 
    let c = 300;
}

console.log(a);
console.log(b);
// console.log(c); // 不可见  

function是函数的定义,是一个独立的作用域,其中定义的变量在函数外不可见

  • var a = 100 可以提升声明,也可以突破非函数的块作用域
  • a = 100 隐式声明不能提升声明,在“严格模式”下会出错,但是可以把变量隐式声明为全局变量。建议少用
  • let a = 100 不能提升声明,而且不能突破任何的块作用域。推荐使用
function show(i, arg) {
    console.log(i, arg)
}

// 作用域测试
x = 500;
var j = 'jjjj';
var k = 'kkkk';

function fn(){
    let z = 400;
    {
        var o = 100; // var 作用域当前上下文
        show(1, x);
        t = 'free'; // 此语句执行后,t作用域就是全局的,不推荐
        let p = 200;
    }
    var y = 300;
    show(2,z);
    show(3,x);
    show(4,o);
    show(5,t);
    //show(6,p); // 异常,let出不来上一个语句块
    {
        show(7,y);
        show(8,o);
        show(9,t);
        {
            show(10,o);
            show(11,t);
            show(12,z);
        }
    }
    
    j = 'aaaa';
    var k = 'bbbb';
    show(20, j);
    show(21, k);
}

// 先执行函数
fn()

show(22, j);
show(23, k);

//show(13,y); // 异常,y只能存在于定义的上下文中,出不了函数
show(14,t); // 全局,但是严格模式会抛异常

//show(15,o) // 看不到o,异常原因同y

show(16,z); // 变量声明提升,var声明了z,但是此时还没有赋值
var z = 10;

const m = 1
//m = 2 // 常量不可以重新赋值

// 执行结果
1 500
2 400
3 500
4 100
5 'free'
7 300
8 100
9 'free'
10 100
11 'free'
12 400
20 'aaaa'
21 'bbbb'
22 'aaaa'
23 'kkkk'
14 'free'
16 undefined

严格模式

  • 使用"use strict";,这条语句放到函数的首行,或者js脚本首行

异常

抛出异常

Js的异常语法和Java相同,使用throw关键字抛出。
使用throw关键字可以抛出任意对象的异常

throw new Error('new error');
throw new ReferenceError('Ref Error');
throw 1;
throw 'not ok';
throw [1, 2, 3];
throw {'a':1};
throw () => {}; // 函数

捕获异常

try...catch 语句捕获异常
try...catch...finally 语句捕获异常,finally保证最终一定执行

  • 注意这里的catch不支持类型,也就是说至多一个catch语句
  • 可以在catch的语句块内,自行处理异常
try {
    //throw new Error('new error');
    //throw new ReferenceError('Ref Error');    
    //throw 1;  
    //throw new Number(100);   
    // throw 'not ok';   
    // throw [1,2,3];   
    // throw {'a':1};    
    throw () => {}; // 函数
} catch (error) {   
    console.log(error); 
    console.log(typeof(error));
    console.log(error.constructor.name);
} finally {
    console.log('===end===')
}
多物理场耦合仿真-主题032-电磁-流体耦合 电磁-流体耦合,即磁流体动力学(MHD, Magnetohydrodynamics),是研究导电流体在电磁场中运动规律的学科,涉及电磁场与流体力学的深度耦合。本主题系统阐述磁流体动力学的基本理论、控制方程和数值方法。首先介绍MHD的基本概念和物理基础,包括导电流体的性质、电磁场基本方程;然后详细推导MHD控制方程组,包括连续性方程、动量方程、能量方程和电磁场方程;接着讨论MHD流动的特征参数,如Hartmann数、磁雷诺数、相互作用参数等;最后通过六个典型工程案例展示MHD分析的实际应用,包括电磁泵、磁流体 阅读详情

相关推荐

从Gotham到Foundry:拆解Palantir三大产品线,看它如何用‘本体’统一企业数据与AI

本文深入解析Palantir的三大产品线Gotham、Foundry和Apollo,揭示其如何通过独特的'本体'架构实现企业数据与AI的无缝融合。从国防情报到商业决策,Palantir的产品架构展现了强大的数据整合与AI赋能能力,为企业构建数字孪生提供革命性解决方案。

weixin_30823001的博客 321

函数#函数的使用#函数传参#返回值return

因为函数是有函数作用域的,如果不使用 return , 那么在函数体中赋值,在函数外是不能使用的。return后面的代码不会再被执行,会立即结束当前函数,所以return后面的 数据不要换行写。console.log( num1 + num2 ) // 打印出来的结果为3。// 结果为20 , 相当于执行了 fn() = 20。// 相当与 num1 = 1, num2 = 2。需要调用者传入数据,那么就需要用带参数的函数。函数是执行特定任务的代码块,//函数不调用,自己不执行。

Carrie_ali的博客 429

LTO编译器优化介绍以及开启方法

LTO优化的详细介绍

性感的小君君 4922

JavaScript基础语法-函数

函数调用、实参、形参、arguments、递归调用

m0_74343097的博客 1130

自动驾驶仿真 (三)—— 基于PreScan与Simulink的AEB系统仿真

自动驾驶仿真三—— 基于PreScan&Simulink的AEB系统仿真1. AEB自动紧急制动系统1. 1 TTC碰撞时间模型1. 2 C-NCAP法规部分术语与定义1. 3 主动安全ADAS系统试验项目2. AEB仿真分析建模2.1 搭建场景2.2 传感器建模2.3 添加AEB控制系统3. 典型工况仿真3.1 CCRs仿真测试3.1 CCRm仿真测试4. 参考学习的书目教材 博主前面的博文已经介绍了Prescan&Simulink基本的场景建模及仿真分析流程,《自动驾驶仿真 (二)——

zhudj08的博客 1万+

NRF52832串口通信避坑指南:从SDK配置到硬件流控(RTS/CTS)实战

本文详细介绍了NRF52832串口通信的实战指南,从SDK配置到硬件流控(RTS/CTS)的完整实现。通过分析UARTE模块特性、解决SDK版本差异问题、正确配置硬件引脚以及实现稳定通信的代码示例,帮助开发者避开常见陷阱,确保高效可靠的串口通信。特别强调了硬件流控在高速通信中的重要性及其实践方法。

weixin_33739646的博客 281

JavaScript中的函数

本文旨在帮助大家学习JavaScript中的函数

qq_63946637的博客 1550

Windows系统离线搭建PyTorch深度学习环境全攻略(CUDA+cudnn实战)

本文提供了一份在Windows系统下离线搭建PyTorch深度学习环境的完整实战指南。文章详细讲解了如何在没有网络连接的情况下,正确安装和配置CUDA、cudnn以及PyTorch,并构建独立的Python虚拟环境。重点强调了版本依赖关系的重要性,并提供了从驱动准备到环境验证的每一步操作,旨在帮助用户高效、稳定地部署可复用的GPU深度学习开发环境。

table的专栏 578

javascript语法函数

javascript语法函数 javascript 语法 1.javascript 函数、变量和操作符都是区分大小写的。 2.javascript标识符可以包含字母、数字、下划线(_)或美元符($),不能以数字开头。 3.关键字不能用作标识符。 编码习惯 js通常使用camel规则进行标识符书写。 变量定义 1.javascript的变量是松散类型的,所谓松散类型就是用来保存任何类型的数据。 2.定义变量时要使用var操作符(var是关键),后面跟一个变量名(变量名是标识符)。[外链图片转存失败,源站可能有

one的博客 420

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 943

海思Hi3519A开发:DSP开发指南

通过创建DSP项目、实现算法、编译调试等步骤,开发者可以充分利用Hi3519A芯片集成的DSP,实现各种音视频处理功能。通过以上示例,我们可以看到在Hi3519A开发平台上进行DSP开发是一项强大而灵活的任务。在调试过程中,可以使用调试工具提供的功能,如断点设置、变量查看等,以便更好地理解和优化DSP算法的执行过程。在Hi3519A开发平台上,我们可以利用DSP的高性能计算能力来加速这些算法的执行。在实际的DSP开发中,算法的实现可能更加复杂,需要结合具体的项目需求进行。3.2 DSP算法实现。

QoTypescript的博客 1494

JS常用语法归纳(全)

JS基础语法归纳,快速掌握JS语言

nx_live的博客 7330

R语言数据可视化:绘制世界地图的两种方案

本文介绍了两种使用R语言绘制世界地图的方案:包含边界边框和不包含边界边框。无论您选择哪种方案,使用ggplot2包和相关的地理数据包,我们可以轻松地绘制出漂亮的世界地图。R语言提供了丰富的包和函数,使我们能够轻松地绘制世界地图,并根据需求添加边界边框。在本文中,我将介绍两种绘制世界地图的方案:一种包含边界边框,一种不包含边界边框。在上述代码中,我们使用了与方案一相同的数据准备和地图绘制步骤,但省略了添加边界边框的代码。函数的调用,我们可以绘制不包含边界边框的世界地图。方案二:绘制不包含边界边框的世界地图。

CodeMaven的博客 2225

JavaScript自学心得一(基础、语法、函数,异常处理/事件处理)

一:JavaScript基础教程1、JavaScript介绍:一种轻量级的编程语言、是可插入HTML页面的编程代码,JavaScript插入HTML页面后,可由所有浏览器执行。2、JavaScript用法:HTML中脚本必须位于<script></script>标签中。脚本可以被放置在HTML页面的<body>或者<head>中。在HTML中不限制脚...

qq_39082301的博客 343

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JavaScript语法基础---函数以及异常处理

未在严格模式下运行,下一篇在strict模式下 文章目录函数函数表达式箭头函数函数参数普通参数可变参数参数解构函数返回值作用域全局作用域命名空间局部作用域解构赋值解构方法使用场景异常处理抛出异常异常的捕获 函数 函数时由时间驱动的或者当它被调用时刻重复执行的代码块。 //格式 function 函数名(参数列表) { 函数体; // 每个字句之间用;号隔开,可以避...

ammmao的博客 360

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JS 语法之--函数,异常

1、函数    2、函数表达式   使用表达式定义函数,表达式中的函数名可以省略,如果这个函数名不省略,也只能用在此函数内部。   测试:匿名函数 + 函数表达式 1 // 匿名函数 2 const add = function (x, y) { 3 return x + y; 4 }; 5 console.log(typeof(add)) /...

weixin_30411239的博客 104

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JS-进阶

JS-进阶

low666的博客 1066

关于 js:1. 基础语法与核心概念

就确定了作用域链,查找变量是“由内向外,一层层查找”。

Triste__chengxi的博客 1203

怎么能学好Web前端开发 JS进阶知识点包括哪些

  怎么能学好Web前端开发?JS进阶知识点包括哪些?JavaScript是前端小白学习的难点,但又是前端工程师必须要掌握的技能。很多同学反映JavaScript知识点多而杂,不知道如何下手,下面就给大家盘点一下JavaScript相关的知识点。   语言构成:   1)基础语法(ECMAScript=ES 1、2、3、3.1、5(IE9+)、6:ES2015)/   2)BOM:Brower Object Model 浏览器对象模型   3)DOM(W3C):Document Objec.

qq_43444478的博客 323

JavaScript语法-基础

一、JS能做什么 1)改变HTML内容 2)改变HTML属性 3)改变CSS样式 4)隐藏HTML元素 5)显示隐藏HTML元素 二、JS知识体系 JS语法---->DOM操作---->BOM操作---->JS框架 三、JS的书写位置 第一种写法: 在<body>中的<script>标签中,书写JavaScript代码 <script> document.getElementById("demo"),innerHTML = "我的第一段JavaScri

摘 月 211

JavaScript 快速入门

JS基本语法 JS是什么? JavaScript的简写,与Java没有一毛钱关系。 客户端(浏览器)脚本,服务器端的脚本叫Node.js 可以给静态页面添加动态属性,如:修改样式,添加事件。 由来:NetSpace =&amp;amp;gt; LiveScript,后来与Sun公司有合作,借助Java做推广,将名字改为JaveScript JS引入方式 方式1:通过页面任意位置的script标签,标签中就可...

itmeng 188

爬虫逆向你应该懂得Javascript知识

就是 broswer object model 浏览器对象,浏览器自带的对象有 window,navigate,loaction,history,screen ,这个地方很重要,为什么需要补环境,因为我们的使用nodejs模拟浏览器执行js,但是node的环境是没有这些对象的。​ 调用函数时,解析器也不会检查实参的数量,多余实参不会被赋值,如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined。元素节点.insertBefore(element) 在指定的子节点前面插入新的子节点。

ak_bingbing的博客 2290

深入了解JS语法与DOM操作

掌握JavaScript的基础语法和DOM操作是前端开发的必备技能。通过本篇文章,我们介绍了JavaScript的基本语法,包括变量声明、数据类型、条件语句、循环和函数等内容;同时,我们也深入探讨了常见的DOM操作方法,如获取元素、修改内容、添加删除元素、事件处理等。通过对这些技术的掌握,您可以创建更动态和交互性更强的网页。

m0_63392104的博客 453

JavaScript脚本语言重点汇总

<html> <head> <title>hello js</title> </head> <style> </style> <body bgcolor="green"> <table> <tr> <td width="300px" bgcolor="blue"> <!--JS简介--> <!-- 改变html内容--> <button va

喜狼狼与灰太杨的博客 247

JavaScript函数声明

js函数声明 js函数调用

weixin_44201223的博客 454

【JavaScript】第一阶段学习(语法)

JavaScript 语句是发给浏览器的命令。 这些命令的作用是告诉浏览器要做的事情。 <script>标签 在HTML中插入JS,使用<script>标签告诉JS在何处开始和结束 <script> ... </script> <!--中间的便是JS代码 --> 在 <head> , <body> 和外部文件的JS函数 脚本可位于 HTML 的 <body> 或 <head> 部分

xinxuey的博客 845
上一篇: JS语法 -- 控制语句
下一篇: HTML
鹿夏
博客等级 码龄8年 24粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值