【JavaScript:函数】

js基本语法第十讲:JavaScript中的函数 1. 函数定义和调用 2. 函数参数 3. 函数返回值:return 4. 立即执行函数 5. 函数的方法与隐含参数 阅读详情

3. 函数

3.1 定义函数

定义方式一

function abs(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

abs(10) //10
abs(-10) //10
  • 执行到return代表函数结束
  • 没有执行return,函数执行完也会返回结果,结果为undefined

定义方式二

var abs = function(x){
    if(x>=0){
        return x;
    }else{
        return -x;
    }
}

**function(x){…} **这是一个匿名函数。但是可以吧结果赋值给abs,通过abs调用函数

方式一和方式二等价

**参数问题:**JavaScript 可以传任意个参数,也可以不穿参数

参数进来是否存在的问题?

假设不存在参数,如何规避?

var abs = function (x) {
    //手动抛出异常
    if (typeof x !== 'number') {
        throw 'Not a number';
    }
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

arguments

arguments代表传递进来的所有参数,是一个数组

var abs = function (x) {
    console.log("x=>"+x);

    for (var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }

    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}

image.png

rest

以前

if (arguments.length>2){
    for(var i=2; i<arguments.length; i++){
        //......
    }

ES6新特性:获取除了已经定义的参数之外的所有参数

function aaa(a, b, ...rest) {
    console.log("a =>" + a);
    console.log("a =>" + b);
    console.log(rest);
}

rest参数只能写在最后面,必须用…标识

3.2 变量的作用域

在JavaScript中,var定义的变量实际是有作用域的

  • 假设在函数体中声明,则在函数体外不可以使用
function aaa(){
    var x = 1;
    x = x+1;
}
x = x+2;
  • 如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
function aaa(){
    var x = 1;
    x = x+1;
}

function bbb(){
    var x = 'A';
    x = x+1;
}
  • 内部函数可以访问外部函数的成员,反之不行
function aaa(){
    var x = 1;
    
    function bbb(){
        var y = x+1;
    }
    var z = y+1;
}
  • 假设内部函数变量和外部函数变量重名,
function aaa(){
    var x = 1;
    
    function bbb(){
        var x = 'A';
        console.log('inner' + x); //outer
    }
    console.log('outer' + x); //inner
    bbb()
}
aaa()

//outer1
//innerA

假设在JavaScript中函数查找变量从自身函数开始,由内向外查找。假设外部存在这个同名的外部变量,则内部函数会屏蔽外部函数的变量

全局函数

//全局变量
x = 1;

function aaa(){
    console.log(x);
}
aaa();
console.log(x);

全局对象window

var x = 'xxx';
alert(x);
alert(window.x) //默认所有的全局变量,都会自动绑定在window对象下

**alert()**这个函数本身也是一个window变量

  • JavaScript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错ReferenceError

规范

由于我们所有的全局变量都会绑定到window上,如果不同的js文件,使用了相同的全局变量,冲突->如何减少冲突?

//唯一全局变量
var App = {};

//定义全局变量
App.name = 'App';
App.add = function (a, b) {
    return a + b;
}

把自己的代码全部放入自己定义的唯一空间名字中,降低全局命名冲突的问题

jQuery = $

局部作用域let

function aaa(){
    for (var i=0;i<100;++){
         console.log(i);
}
conso1e.1og(i+1);//i出了这个作用域还可以使用
}

ES6let关键字,解决局部作用域冲突的问题

function aaa(){
    for (let i=0;i<100;++){
         console.log(i);
}
conso1e.1og(i+1);// Uncaught ReferenceError: i is not define
}
  • 建议局部作用域变量都使用let

常量const

在ES6之前,定义常量:只有用全部大写命名的变量就是常量(约定俗成);建议不要修改这样的值

var PI = '3.14';
console.log(PI);
PI = '123'; // 可以被改变
console.log(PI);

在ES6引入常量关键字const

const PI = '3.14'; // 只读变量
console.log(PI);
PI = '123'; // 无法修改

3.3 方法

定义方法:就是把函数放在对象里面,对象只有两个东西:属性和方法

var jack = {
    name: 'Jack',
    birth: 2020,
    //方法
    age: function () {
        var now = new Date().getFullYear();
        return now - this.birth;
    }
}

//jack.age()
//2

this代表什么?

function getAge(){
    var now = new Date().getFullYear();
        return now - this.birth;
}

var jack = {
    name: 'Jack',
    birth: 2020,
    //方法
    age: getAge
}

//jack.age() ok
//getAge() NaN this指向window

this是无法指向的,是默认指向调用它的那个对象;

apply

在js中可以控制this的指向!!!

function getAge() {
    var now = new Date().getFullYear();
    return now - this.birth;
}

var jack = {
    name: 'Jack',
    birth: 2020,
    //方法
    age: getAge
};

getAge.apply(jack,[]);//this指向了jack对象,参数为空
JS的函数篇:理解和使用JavaScript中的函数 在JavaScript中,函数是一段可执行的代码块,可以在程序中被多次调用。函数的定义通常包含函数名、参数列表和函数体。");// 调用函数,输出 "Hello, John!上述代码定义了一个名为greet的函数,它接受一个参数name。函数体中使用语句输出问候信息。通过调用greet函数并传递参数"John",我们可以在控制台中看到相应的输出。JavaScript中的函数是组织和重用代码的重要工具。我们可以通过定义和调用函数来实现代码的模块化和可维护性。 阅读详情

相关推荐

JavaScript 函数式编程:从 Immutable.js 到 Redux

在 JavaScript 中,函数式编程的流行程度越来越高,而 Immutable.js 和 Redux 是两个在函数式编程中起到重要作用的工具。Redux 的核心概念是单一的状态树,即应用程序的整个状态被存储在一个不可变的对象中。通过定义纯函数的 reducers 来处理状态的变化,我们可以保证状态的可预测性和可测试性。Immutable.js 提供了不可变数据结构,帮助我们避免直接修改状态,而 Redux 提供了状态管理机制,使得状态的变化更加可控。由于不可变数据的特性,原始的。

python_bug262的博客 86

JS-10-函数

函数的定义、调用、argument关键字、rest参数、return语句

qq_31532983的博客 661

别再只盯着照片了!手把手教你用Python提取大疆照片里的GPS、姿态和RTK数据

本文详细介绍了如何使用Python提取大疆照片中的GPS、姿态和RTK数据,帮助用户解锁无人机拍摄照片中的隐藏元数据。通过实战代码示例,展示了如何解析EXIF格式的定位、姿态和RTK状态信息,并实现批量处理与数据分析,适用于测绘、农业巡检等专业领域。

weixin_30790841的博客 156

无涯教程-Javascript - abs()函数

此方法返回数字的绝对值。

无涯教程 1128

红外协议 IR NEC 协议深度解析-简单易懂协议详解

1. 协议特征 使用双向编码(又称曼彻斯特编码); 使用38K载波对编码后的波形进行调制; 位时间 1.12ms 或 2.25ms 2. 调制 定义脉冲560µS为脉冲基本宽度T; 根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4: (1) Logic “1” 位宽为2.25ms,脉冲时间560us(T + 3T); (2) Logic “0” 位宽为1.12ms,脉冲时间560us(T + T)。 (3 ) 重复码: 位宽为11.25ms,脉冲时间9ms(16T + 4T)。 3. 协议

代码打工人的博客 1万+

Alipay 支付唤起 h5 测试

测试地址 https://recharge.apps.oppomobile.com/recharge-center/recharge/?from=message try { //唤起客户端快捷参数 var data = {"requestType":"SafePay","fromAppUrlScheme":"alipays","dataString":"h5_ro...

六桥风月IT随笔 1万+

JavaScript函数

JavaScript函数 一.函数的定义 创建函数有两种方式第一种就直接定义函数 function abs(x) { if(x>=0) { return x; } else { return -x; } } 这里是定义了一个abs求绝对值的函数 var abs = function(x) { if(x>=0) { return x; } else { return -x; } }

H24568的博客 253

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1370

JavaScript快速入门之函数

定义方式一绝对值函数if(x>=0){return x;一旦执行到return代表函数结束,返回结果!如果没有执行return,函数执行完也会返回结果,结果就是undefined(未定义)定义方式二if(x>=0){return x;}//类似于匿名内部类function(x){...} 这是一个匿名函数,但是可以把结果赋值给abs,通过abs就可以调用函数!方法一和方法二等效调用函数abs(10)

m0_73856804的博客 777

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

[RK-Linux] 移植Linux-5.10到RK3399(十)| 配置AP6256模组使能WIFI、BT功能

Systemcall名屋 2983

gseapy python包GO、KEGG富集(注释)分析

文档案例参考:https://gseapy.readthedocs.io/en/latest/gseapy_example.html#Over-representation-analysis-by-Enrichr-web-services安装:建议安装最新版(这里安装的1.04):https://github.com/zqfang/GSEApy/releases。

weixin_42357472的博客 3612

JavaScript简易教程3——函数

函数定义和调用 在JavaScript中,定义函数的方式如下: function abs(x) { if (x &gt;= 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义; abs是函数的名称; (x)括号内列出函数的参数,多个参数以,分隔...

jiutianmuzi的博客 299

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

weixin_42412049的博客 2585

JavaScript学习手册八:JS函数

JS函数1、用函数语句定义函数任务描述相关知识用函数语句定义代码文件2、用表达式定义函数任务描述相关知识用表达式定义代码文件3、函数的调用任务描述相关知识函数的调用代码文件4、未定义的实参任务描述相关知识用函数语句定义代码文件5、实参对象任务描述相关知识实参对象代码文件6、对象作为参数任务描述相关知识对象作为参数代码文件7、函数对象任务描述相关知识函数对象作为另一个函数的参数代码文件 1、用函数语句定义函数 任务描述 本关任务:用函数语句定义一个函数。 具体要求如下: 定义一个名字为mainJs()的函数

qq_45823118的博客 1万+

openwrt 固件定制详解:各类默认参数修改及应用添加

本文以friendlywrt22-rk3568发行版为例, 介绍如**何定制**一款**openwrt固件**,定制特性包括网络参数、登陆密码、开机界面(banner)、代理arp、opkg源、hostname、应用默认配置参数修改、增加任意文件(不限于应用程序及其库)等, 最后给出了一个完整的实操实例。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1546

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaScript进阶:变量提升、函数提升、js解析机制

对变量提升、函数提升和js解析机制的理解。什么是变量提升呢,如果不能很好的理解变量提升,程序就容易出现一些问题。理解变量提升,也可帮助我们很好的弄懂js的解析机制。 1.什么是变量提升? 变量提升定义 变量提升就是将变量声明提升到它所在作用域的最开始的部分。 变量提升的理解 理解一:该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去。 理解二:变量可以先使用再声明。 ...

tomorrownan的博客 776

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Javascript:JS两种声明函数的方式

文章目录前言一、相关代码二、执行结果 前言 函数存在于很多计算机语言中,作用大抵不过抽取一些需要反复使用的功能代码;而不同语言,也有不同声明函数的语法。 在Javascript中,便有两种声明函数的方式:函数关键字自定义函数和函数表达式(匿名函数),话不多说,以下直接上代码Demo 一、相关代码 代码如下(示例): <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> &

qjyws的博客 390

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Native调JS:loadUrl JS函数字符串- WebView.loadUrl("javascript:functionName()")

tuhuolong的专栏 2872

js 匿名函数_javascript:函数的使用

大家好,我是专注于前端开发,前端入门,精神可爱的前端小学妹,本期为大家带来的Web前端学习知识是”javascript:函数的使用“,喜欢Web前端的朋友,一起看看吧!主要内容:函数的初识函数的分类函数的类型函数的作用域和作用域链学习目标:思考:为什么使用函数?使用函数能解决什么问题?您能够对代码进行复用:只要定义一次代码,就可以多次使用它。您能够多次向同一函数传递不同的参数,以产生不同的结果。一...

weixin_39737492的博客 176

web前端开发技术——JavaScript学习手册八:JS函数

编程要求本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:定义一个名字为mainJs()的函数;该函数有两个参数,均为字符串类型;函数的功能是返回这两个参数的拼接结果;具体请参见后续测试样例。//请在此处编写代码a = a + b;return a;mainJs();编程要求本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:定义一个匿名函数,将它赋值给变量myFunc;

fyjllll的博客 1689

wu.js vs Lodash vs Underscore:哪个JavaScript函数式工具更适合你?

在JavaScript函数式编程领域,wu.js、Lodash和Underscore是三个备受开发者关注的工具库。它们都提供了丰富的高阶函数,帮助开发者编写更简洁、高效的代码。本文将深入对比这三个库的核心特性、适用场景和性能表现,助你快速选择最适合项目需求的工具。 ## 📌 核心功能对比:各有所长 ### wu.js:ES6迭代器的函数式扩展 wu.js是一个专注于ES6迭代器的JavaSc

gitblog_01033的博客 449

QuickJS原生C模块开发:从零扩展JS引擎,让JavaScript调用C函数(附完整代码)

QuickJS 是一个小巧、可嵌入的 JavaScript 引擎。本文面向新手,带你从零完成 QuickJS 原生 C 模块开发:编写 C 函数、绑定导出、编译动态库,最终让 JavaScript 像调用普通 JS 函数一样直接调用 C 函数。全程只用一个"求斐波那契数"的例子,附完整代码,照着做即可跑通 ⚡ ## 一、为什么给 QuickJS 扩展 C 模块? QuickJS 的核心卖点是*

gitblog_00188的博客 858

Pareto.js:极简、直观且高效的JavaScript函数库

Pareto.js:极简、直观且高效的JavaScript函数库 项目介绍 Pareto.js 是一个超轻量级的JavaScript实用工具库,专注于提供核心的函数式编程功能。这个库仅有14个核心函数,它以TypeScript编写的,并鼓励在日常编程中采用不可变数据处理方式。Pareto.js确保了所有函数都是纯函数,即无副作用,设计上追求极致的小巧与性能。相较于lodash等更大型的库,Pare...

gitblog_00106的博客 864

JavaScript构造函数学习:js中构造函数与普通函数的区别

构造函数不仅只出现在JavaScript中,它同样存在于很多主流的程序语言里,比如c++、Java、PHP等等。与这些主流程序语言一样,构造函数在js中的作业一样,也是用来创建对象时初始化对象,并且总与new运算符一起使用。 在js中,构造函数与普通函数的区别不是很大。接下来就主要讲讲两者的区别。 1.在命名规则上,构造函数一般是首字母大写,普通函数则是遵照小驼峰式命名法。 2.在函数调用时...

趙小二啊 1937

JavaScript知识训练:JS函数

1、下列选项中,( )可用于检查某个值是否为无穷大的数。 B、 isFinite() 2、函数parseInt(15.36)的值是( ) A、 15 3、函数parseFloat(15.36)的值是( ) D、 15.36 4、下面代码中s的值是( ) var a="100" var b=100; var s=a+b; alert(parseInt(s)); ``` C、 100100 5、isNaN(“abc”)的返回值为 ( ). C..

m0_60416689的博客 994
上一篇: 【力扣149. 直线上最多的点数】
下一篇: 【JavaScript:内部对象 (Date、JSON)】
莱布尼杰
博客等级 码龄9年 3粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值