JS学习笔记(五)

本系列更多文章,可以查看专栏 JS学习笔记


文章目录

  • JS学习笔记(五)
  • 一、函数
    • 1. 函数定义
    • 2. 方法( 对象 + 函数 )
  • 二、函数参数及返回值
    • 1. 传递原始类型参数
    • 2. 传递对象类型参数
    • 3. 函数返回值
    • 4. 箭头函数
    • 5. arguments对象
  • 三、函数的调用
    • 1. 调用方式
    • 2. 标签函数(ES6新增)
      • (1)如何调用标签函数
      • (2)原始字符串
  • 结尾

一、函数

函数也是一种对象,也是一种引用类型,函数的 ( ) 内是参数,[ ]内部代表可以省略的部分。

1. 函数定义

(1)函数声明

function 函数名([参数]){语句...
}

(2)函数表达式

const 变量名 = function([参数]){语句...
}

(3)箭头函数

([参数]) => {语句...
}

箭头函数也可以类似于(2),用变量来接收函数返回值

2. 方法( 对象 + 函数 )

对象内可以定义属性,当某一个属性值不是简单的原始类型等,而是一个函数时,此时的函数可以称为对象的方法。

其中,sayHello()就是一个方法,可以通过 对象.方法名() ,对方法进行调用

let obj = { name:"张三", sayHello(){alert("你好,我是张三");}
}
obj.sayHello();

二、函数参数及返回值

函数声明时的参数为形参(形式参数),函数调用时的参数为实参(实际参数)。

ECMAScript中的所有参数都是按值传递的,不可能按引用传递参数如果把对象作为参数传递,那么传递的值就是这个对象的引用。

1. 传递原始类型参数

函数中的形式参数,在没有接受实参的赋值时,相当于对于每次调用此函数时,都会对重新声明形参变量。因此函数内部,也不能使用 let 或 const 对形参再次声明。

    1. 形参和实参个数相同时,实参一一对应赋值给形参
    1. 形参个数大于实参个数时,未被赋值的形参的值为undefined
    1. 形参个数小于实参个数时,多余的实参无意义,不被传递给形参
// 函数声明
function sum(a, b) {console.log(a + b);
}
sum(20, 30); // 相当于在调用函数的同时,a=20,b=50

可以为形参设置初值(ES6)

// 函数声明
function sum(a, b=5) {console.log(a + b);
}
sum(20); // 由于未给b没有实参,故b使用默认值
sum(20,20); // 如果已经赋值,会使b=20,不再使用默认值

2. 传递对象类型参数

如果形参是对象,调用函数传递实参后,形参和实参会指向同一个变量

let obj = { name:'张三'};
function test(o){alert(o.name)  // 输出'张三'o.name = '李四'; alert(o.name)  // 输出'李四'
}
alert(obj.name)     //输出'李四'

因为o=obj,o.name修改时,obj对象的name也被修改

3. 函数返回值

使用 return 来接收函数的返回值

// 函数声明
function sum(a, b) {return a + b;
}
// 相当于在调用函数的同时,a=20,b=50
let result = sum(20, 30);
//后续可以使用函数的返回值进行其它操作
console.log(result);

函数也可以作为参数

// 接此部分上方代码
let result2 = sum(sum(20,30),50);
console.log(result2); // 结果为100

4. 箭头函数

(1)此时, add 并不是 接收箭头函数返回值的变量 ,而是表示 整个箭头函数

const add = (a, b) =>{return a + b;
}
// 输出箭头函数
console.log(add);
// 输出调用箭头函数后的返回值
console.log(add(10,20));

输出结果,如下图所示:


(2)如果箭头函数形参只有一个,可以省略 ()

// 省略括号
const test1 = a => {alert(a)
}
test1(5)
// 不省略括号
const test2 = (a) => {alert(a)
}
test2(10)

(3)箭头函数返回值可以省略return;且,若 { } 内部 只有一行代码,可以省略 {}

const test = (a, b) => a + b;
console.log(test(10, 20));  // 30

若对象字面量作为返回值时,想要省略return时,需要为返回字面量加上 ()

const test = () => ({ name: "王五" });
console.log(test()); // { name: "王五" }
console.log(test().name); // '王五'

5. arguments对象

ES6中可以用 ... 运算符和变量名来代替此对象;箭头函数没有 arguments 对象。

  • (1)在 function 定义的 (非箭头函数时,可以在函数内部访问 arguments 对象,从中获取传进来的每个参数值。
  • (2)arguments对象是一个类数组对象,但不是Array的实例,可以使用数组中括号方式访问其中的元素
  • (3)函数声明时,可以不定义形参;但是调用函数时传入实参后,也可通过 arguments 访问参数
  • (4)arguments对象可以和命名参数同时使用,arguments对象的 length 值与传入参数个数有关,与定义参数个数无关
function sayHello() {// 可以使用模板字符串插值console.log(`Hello,I'm ${arguments[0]}!`);// 可以使用普通字符串拼接console.log("I'm " + arguments[1] + " years old.");
}
sayHello("Jack", 19);

function sum(a, b, c) {// 值同步console.log(a); // 5console.log(arguments[0]); // 5// 修改第二个参数值arguments[1] = 100;console.log(b); // b的值也被修改为100// 试图通过arguments对象,为c赋值arguments[2] = 20;console.log(c); // undefinedconsole.log(arguments[2]); // 20
}
sum(5, 10);

注:arguments 对象的值,始终与对应的命名参数同步。但是不可以通过修改arguments,来为未在调用时传入的命名参数赋值。


三、函数的调用

1. 调用方式

不考虑传参情况时:

(1)函数名()
(2)函数名.call(调用对象)
(3)函数名.apply(调用对象)
(4)new 函数名()
(5)对象.方法()

2. 标签函数(ES6新增)

(1)如何调用标签函数

通常,以函数名作为模板字面量前缀,来应用自定义行为。

let a = 6,b = 9;
// 参数分别为模板字符串数组 和 可变个数的表达式
function simpleTag(strings, ...expressions) {console.log(strings); for (let expression of expressions) {console.log(expression);}return "test";
}
// 定义普通模板字符串
let untaggedResult = `${a}+${b}=${a + b}`;
console.log(untaggedResult); // 6+9=15// 定义标签函数
let taggedResult = simpleTag`${a}+${b}=${a + b}`;
// ['', '+', '=', '', raw: Array(4)]
// 6
// 9
// 15
console.log(taggedResult); // test

代码运行效果,如下所示:

注:若模板字符串有 n 个插值(${}),则标签函数的参数个数一定为 n+1 个,第一个为模板字符串数组,后面 n 个参数为传入的值或者表达式计算得到的值;标签函数的返回值为原函数的返回值


(2)原始字符串

使用 String.raw 标签函数,可以直接获取原始的模板字面量。

console.log(`\u00A9`); // ©
console.log(String.raw`\u00A9`); // \u00A9

结尾

部分内容参考《ECMAScript 6 入门》《JavaScript权威指南》《JavaScript高级程序设计》,如有错误,欢迎评论区指正。

JS学习笔记(五)函数类型、箭头函数、arguments参数、标签函数相关推荐

  1. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

  2. Vue.js 学习笔记 五 常用的事件修饰符

    介绍几个常用的事件修饰符 直接上代码 <div id="divApp"><div class="divColor" v-on:click=&q ...

  3. three.js学习笔记(五)——Shadows阴影

    阴影一直是实时三维渲染的挑战,开发人员必须在合理的情况下找到显示真实阴影的技巧. Three.js 有一个内置的解决方案,虽然其并不完美,但用起来很方便. 阴影是怎么工作的? 当你进行一次渲染时,Th ...

  4. 【Node.js学习笔记五】npm(Node包管理器)命令行选项

    Node包管理器(Node Packaged Manager,NPM) Node封装模块(Node Packaged Module,module)   选项 说明 示例  1  search  在存储 ...

  5. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  6. Vue.js 学习笔记 六 v-model 双向绑定数据

    之前说的v-bind指令,可以绑定数据,但是是单向的,从model向view绑定,下面介绍v-model,可以双向绑定数据 <div id="divApp"><p ...

  7. Vue.js 学习笔记 四 用一,二,三的知识做个跑马灯

    做个简单的跑马灯效果 页面定义2个按钮,绑定2个方法. <div id="divApp"><input type="button" value ...

  8. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  9. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

最新文章

  1. Android 6.0 运行时权限处理完全解析
  2. 河南理工大学新生挑战赛【部分题题解】
  3. 球球大作战体验服找不到团战服务器6,球球大作战常见问题汇总 新版本问题解决方法...
  4. python中if控制语句_Python中流程控制语句之IF语句
  5. 常用SQL语句大全总结
  6. 苹果推出网页版Apple Music 浏览器上听音乐 这波操作有点迟?
  7. 空格html怎么使用,HTML里空格应该如何使用
  8. react-native gradle
  9. 动易cms5.0如何安装在远程服务器上,动易PowerEasy_SiteWeaver_CMS6.8安装教程
  10. 数据集Pascal VOC2012
  11. 计算机文献检索语言,计算机文献检索论文参考文献集 计算机文献检索论文参考文献数量是多少...
  12. No serializer found for class
  13. ubuntu键盘突然失灵怎么办?
  14. 电脑重启桌面 计算机图标消失,电脑重启后计算机图标不见了怎么办
  15. [宝塔]配置ssl证书,提示错误:证书错误,请粘贴正确的PEM格式证书
  16. 【书影观后感 十二】沧浪之水清兮,可以濯我缨 沧浪之水浊兮,可以濯我足
  17. 图漾科技招聘|机器视觉算法、嵌入式驱动开发高级工程师等岗位
  18. 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
  19. gmail通讯录同步
  20. AngularJS学习之angular.extend用法实例

热门文章

  1. 百汇BCR:什么是外汇交易风险?如何尽量减少风险影响?
  2. linux命令行的 是啥意思,linux是什么 Linux 命令行中的21是什么意思
  3. ES6—字符串模板引擎
  4. 表单写年龄选择html,表 单 / HTML
  5. GitHub上25个最受欢迎的开源机器学习库
  6. 实测:TB级倾斜摄影模型合并根节点前后加载效果对比,结果惊人
  7. 内推安排!阿里淘系算法!
  8. 电子学会2023年3月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析
  9. 我的世界1.13 mod制作——简单的方块(五)
  10. shell 语句出错自动退出