JavaScript基础 -- 函数

JavaScript基础——4.JS函数 JS 函数声明需要以 function 关键字开头,后面跟上空格以及函数名,函数体用花括号括起来 格式如下:function 函数名(参数) {// 函数中的代码// 示例代码 函数声明// 函数表达式 类似于 python中的匿名函数。 阅读详情

函数实际上是对象,每个函数都是 Function 类型的实例,而 Function 也有属性和方法,跟其他引用类型一样

因为函数是对象,所以函数名就是指向函数对象的指针,而且不一定与函数本身紧密绑定

箭头函数

箭头函数可以不使用大括号,但这会改变函数的行为。使用大括号就说明包含“函数体”,可以在一个函数中包含多条语句,跟常规的函数一样。如果不使用大括号,那箭头后面只能有一行代码,比如一个赋值操作,或者一个表达式;而且,省略大括号会隐式返回这行代码的值

在这里插入图片描述

箭头函数不能使用 arguments、super 和 new.target,也不能用作构造函数。此外,箭头函数也没有 prototype 属性

理解参数

ES 不关心传入的参数个数,也不关心这些参数的数据类型,ES 函数的参数在内部表现为一个数组。在使用 function 关键字定义(非箭头)函数时,可以在函数内部访问 arguments 对象,从中取得传进来的每个参数值

arguments 对象是一个类数组对象(但不是 Array 的实例),可以使用中括号语法访问其中的元素,访问 arguments.length 属性可确定传进来多少个参数

在 arguments 对象中,它的值始终会与对应的命名参数同步,通过下面这个例子进行理解:

function doAdd(num1, num2) {
    arguments[1] = 10
    console.log(arguments[0] + num2)
}

因为 arguments 对象的值会自动同步到对应的命名参数,所以修改 arguments[1] 也会修改 num2 的值,因此两者的值都是10。但这不意味着它们访问的是同一个内存地址,它们在内存中还是分开的,只不过会保持同步

PS:如果只传一个参数,然后把 arguments[1] 设置为某个值,那这个值并不会反映到第二个命名参数。这是因为 arguments 对象的长度是根据传入的参数个数,而非定义函数时给出的命名参数个数确定的

对于命名参数而言,如果调用函数时没有传这个参数,那么它的值是 underfunded,这类似于定义了变量而没有初始化

箭头函数中的参数

如果函数是使用箭头语法定义的,那不能使用 arguments 关键字访问传给函数的参数,只能通过定义的命名参数访问

在这里插入图片描述

虽然箭头函数中没有 arguments 对象,但可以在包装函数中把它提供给箭头函数:

在这里插入图片描述

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

函数声明与函数表达式

JS引擎在任何代码执行之前,会先读取函数声明,并在执行上下文中生成函数定义。而函数表达式必须等到代码执行到它那一行,才会在执行上下文中生成函数定义

console.log(sum(10, 30))
function sum(num1, num2) {
    return num1 + num2
}

以上代码可以正常运行,函数声明会在任何代码执行之前先被读取并添加到执行上下文,这个过程叫函数声明提升。如果把这段代码中的函数声明改成等价的函数表达式,那么执行就会出错:

console.log(sum(10, 30))
let sum = function sum(num1, num2) {
    return num1 + num2
}

因为这个函数定义包含在一个变量初始化的语句中,这意味着代码如果没有执行到加粗这一行,那么执行上下文中就没有函数的定义,所以上面的代码会出错。这不是因为使用 let 而导致的,使用 var 也会出现这样的问题

PS:除了函数什么时候真正有定义这个区别以外,这两种语法是等价的

函数内部

ES5中,函数内部存在两个特殊的对象:arguments 和 this,ES6又新增了 new.target 属性

arguments

arguments是一个类数组对象,包含调用函数时传入的所有参数,这个对象只有以 function 关键字定义函数时才会有。它还有一个 callee 属性,是一个指向 arguments 对象所在函数的指针

function factorial(num) {
    if (num <= 1) {
        return 1
    } else {
        return num * factorial(num - 1)
    }
}

在上面的递归代码中,确保正确执行函数名必须是factorial,而使用 arguments.callee 就可以让函数逻辑与函数名解耦,这样就避免了之前的硬编码:

function factorial(num) {
    if (num <= 1) {
        return 1
    } else {
        return num * arguments.callee(num - 1)
    }
}

在严格模式下是访问不到 arguments.callee 的,此时可以使用命名函数表达式达到目的

创建一个命名函数表达式 f(),将其赋值给 factorial,即使把函数赋值给另一个变量,函数表达式的名称 f 也不变,因此递归调用不会有问题,在严格和非严格模式下都可以使用

const factorial = (function f(num) {
    if(num <= 1) {
        return 1
    } else {
        return num * f(num - 1)
    }
})

this

this在标准函数和箭头函数中有不同的行为

在标准函数中,this 引用的是把函数当成方法调用的上下文对象,这时候通常称为 this 值(在网页的全局上下文中调用函数,this 指向 windows)

在这里插入图片描述

定于在全局上下文中的函数 sayColor() 引用了 this 对象,这个 this 到底引用哪个对象必须到函数被调用时才能确定,因此这个值在代码执行的过程中可能会变。在全局上下文中调用 sayColor(),this指向window,this.color 相当于 window.color;而把 sayColor() 赋值给 o 之后再调用,this 会指向 o

在箭头函数中,this 引用的是定义箭头函数的上下文,在下面这个例子中,因为这个箭头函数是在 window 上下文中定义的,this 引用的都是 window 对象

在这里插入图片描述

PS:函数名只是保存指针的变量,因此全局定义的 sayColor() 和 o.sayColor() 是同一个函数,只不过执行的上下文不同

在事件回调或定时回调中调用某个函数时,this 值指向的并非想要的对象,此时将回调函数写成箭头函数就可以解决问题,因为箭头函数中的 this 会保留定义该函数时的上下文:

function King() {
    this.name = 'Henry'
    // this 引用 King 的实例
    setTimeout(() => console.log(this.name), 1000)
}
function Queen() {
    this.name = 'Jerry'
    // this 引用 Window 对象
    setTimeout(function() { console.log(this.name) }, 1000)
}
new King   // Henry
new Queen // undefined

new.target

ES 中的函数始终可以作为构造函数实例化一个新对象,也可以作为普通函数被调用,ES6 新增了检测函数是否使用 new 关键字调用的 new.target 属性。如果函数是正常调用的,则 new.target 的值是 undefined;如果是使用 new 关键字调用的,则 new.target 将引用被调用的构造函数

在这里插入图片描述

函数属性与方法

每个函数都有两个属性:length 和 prototype,length 属性保存函数定义的命名参数的个数,prototype 保存引用类型所有实例,这意味着 toString()、valueOf() 等方法都把保存在 prototype 上,进而由所有实例共享。

函数还有两个方法:apply() 和 call(),这两个方法都会以指定的 this 值来调用函数,即会设置调用函数时函数体内 this 对象的值

apply() 接受两个参数:函数内 this 的值和一个参数数组,第二个参数可以是 Array 的实例,也可以是 arguments 对象

在这里插入图片描述

PS:在严格模式下,调用函数时如果没有指定上下文对象,则 this 值不会指向 window。除非使用 apply() 或 call() 把函数指定给一个对象,否则 this 的值会变成 undefined

call() 与 apply() 的作用一样,只是传参的形式不同。第一个参数也是 this 值,第二个必须将参数一个一个列出来,逐个传递

在这里插入图片描述

使用 apply() 或 call() 可以将任意对象设置为任意函数的作用域,相当于可以改变 this 值。在 ES5 中,出于同样的目的定义了一个新方法:bind(),它会创建一个新的函数实例,其 this 值会被绑定到传给 bind() 的对象

在这里插入图片描述

闭包

了解闭包,先要知道 JS 中的几个特性:

1)词法作用域

又称为静态作用域,决定了变量和函数的可见性基于其在源代码中的位置。换句话说,函数的作用域在它被定义的时候就已经确定,而不是在运行时。这意味着,无论函数在哪里被调用,它都能访问到定义时所在的作用域中的变量

2)作用域链

它是 JS 引擎查找变量时的一套规则。当一段代码执行时,其所在的执行上下文就会被创建,这个上下文包含了当前作用域的所有变量和函数定义

闭包指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的,这意味着,闭包可以让开发者从内部函数访问外部函数的作用域

function makeFunc() {
    var name = "Mozilla"
    function displayName() {
        alert(name)
    }
    return displayName
}

var myFunc = makeFunc()
myFunc()

在displayName这个作用域下访问了另外一个函数makeFunc下的局部变量name,闭包的实现实际上利用了 JS 中作用域链的概念,如果在某个作用域下访问某个变量的时候,如果不存在就一直向外层寻找,直到在全局作用域下找到对应的变量为止

闭包的特性

闭包的特性主要有以下:

1)闭包可以访问到父级函数的变量

2)访问到父级函数的变量不会销毁

对于变量不会被销毁的理解:函数当作值传递,即所谓的 first class 对象,可以把函数当作一个值来赋值,当作参数传给别的函数,也可以把函数当作一个值 return。一个函数被当作值返回时,也就相当于返回了一个通道,这个通道可以访问这个函数词法作用域中的变量,即函数所需要的数据结构保存了下来,数据结构中的值在外层函数执行时创建,外层函数执行完毕时理因销毁,但由于内部函数作为值返回出去,这些值得以保存下来。而且无法直接访问,必须通过返回的函数,这也就是私有性。

通过以下的例子来进行理解:

var age = 18
function person(){
    age++
    console.log(age)
}
    
person()  // 19
person() // 20

调用了 2 次函数,age 值增长到 20,但这样写会导致全局变量被污染,所以将 age 的定义移动到 person 函数内部

function person() {
  var age = 18
  age++
  console.log(age)
}

person() // 19
person() // 19

但这又导致另一个问题,变成局部变量的 age 不会自增了,这时就可以利用闭包的这个特性,将每次调用时的 age 保存起来这样就可以实现变量的自增了

function person() {
  var age = 18
  return function(){
    age++
    console.log(age)
  }
}

let getPersonAge = person()
getPersonAge() // 19
getPersonAge() // 20

可以这样理解,通过将 person 函数赋值给 getPersonAge 这个变量,可以看作如下代码:

let getPersonAge = function(){
  age++
  console.log(age)
}

每当调用 getPersonAge() 函数的时候,首先要获取 age 变量,因为 JS 中存在作用域链的关系,所以会从 person 函数下得到对应的 age,因为闭包存在着可以访问到父级函数的变量,且该变量不会销毁的特性,上次的变量会被保留下来,所以可以做到自增的实现

内存泄漏及解决方案

由于闭包维持对外部变量的引用,如果处理不当,可能会导致这些变量及相关的整个作用域链长时间驻留在内存中,从而引发内存泄漏。尤其是在大量使用闭包或循环中创建闭包的情况下,必须谨慎处理,确保不再使用的变量能够适时释放,避免不必要的内存占用

以下这个例子发生了内存泄漏,在 get 方法返回的匿名函数中,this 默认指向全局对象,而非 myObj 对象,因为函数独立调用时,其执行上下文默认绑定全局对象

this.name = 'WindowName'
let myObj = {
  name: 'myObj name',
  get: function() {
    return function() {
      console.log(this) // Window
      return this.name
    }
  }
}

let myObjname = myObj.get()()
console.log(myObjname) // WindowName

解决方案1:在 get 函数使用 that 保存此时的 this

get 的 this(即myObj)被赋值给变量 that,内部函数通过闭包访问 that。内部函数不再依赖动态绑定的 this,而是直接引用 myObj。当 myObj 不再需要时,只要没有其他引用,闭包释放后 that 也会被回收,避免内存泄漏

this.name = 'WindowName'
let myObj = {
  name: 'myObj name',
  get: function() {
    let that = this // 保存当前 myObj 的引用
    return function() {
      console.log(that) // myObj
      return that.name
    }
  }
}

let myObjname = myObj.get()()
console.log(myObjname) // myObj name

解决方案2:将 get 函数的返回值改回使用箭头函数的方式做返回

箭头函数没有自己的 this,继承自定义时的外层作用域,此处是 get 方法的 this,即myObj

this.name = 'WindowName'
let myObj = {
  name: 'myObj name',
  get: function() {
    return () => { // 箭头函数继承外层this
      console.log(this) // myObj
      return this.name 
    }
  }
}

let myObjname = myObj.get()()
console.log(myObjname) // myObj name

消除闭包

不用的时候解除引用,避免不必要的内存占用。取消 fn 对外部成员变量的引用,就可以回收相应的内存空间

function add() {
  var count = 0
  return function fn() {
    count++
    console.log(count)
  }
}

var a = add() // 产生了闭包
a() // 1
a() // 2
a = null // 取消 a 与 fn 的联系,这个时候浏览器回收机制就能回收闭包空间

私有变量

任何定义在函数或块中的变量,都可以认为是私有的,因为在这个函数或块的外部无法访问其中的变量。私有变量包括函数参数、局部变量,以及函数内部定义的其他函数

如果在一个函数中创建一个闭包,则这个闭包能访问其外部的变量,基于这一点,就可以创建出能够访问私有变量的公有方法

特权方法是能够访问函数私有变量(及私有函数)的公有方法,在对象上有两种方式创建特权方法。第一种是在构造函数中实现,比如:

在这里插入图片描述

这个模式是把所有私有变量和私有函数都定义在构造函数中,再创建一个能够访问这些私有成员的特权方法,其特权方法其实是一个闭包,因此可行

如下面例子所示,可以定义私有变量和特权方法,以隐藏不能被直接修改的数据:

在这里插入图片描述

这段代码中的构造函数定义了两个特权方法:getName() 和 setName(),每个方法都可以构造函数外部调用,并通过它们来读写私有的 name 变量

静态私有变量

特权方法也可以通过使用私有作用域定义私有变量和函数来实现,比如以下:

在这里插入图片描述

匿名函数表达式创建了一个包含构造函数及其方法的私有作用域,首先定义的是私有变量和私有函数,然后又定义了构造函数和公有方法。公有方法定义在构造函数的原型上,与典型的原型模式一样。

PS:这个模式定义的构造函数没有使用函数声明,使用的是函数表达式

使用闭包和私有变量会导致作用域链变长,作用域链越长,则查找变量所需的时间也越多

微信小程序 - 最新将页面可分享到朋友圈功能,小程序实现分享到朋友圈功能,开启分享给好友及分享朋友圈功能(微信小程序怎么分享到朋友圈?详细流程及示例代码教程) 没有设置过分享朋友圈功能的小程序,分享朋友圈按钮是灰色且无法点击。小程序 vue2 | vue3 版本语法都能使用,跟着教程复制代码运行即可。如下图所示,将页面开启分享后便可由用户转发出去。 阅读详情

相关推荐

【分子指纹】化学分子指纹的概念和应用(非常重要)

分子指纹(Molecular fingerprints)可以低计算成本的方式表示大规模化学数据集中化合物的化学(结构、物理化学等)性质。它们在将化学数据集中的分子转换为适合于计算方法的一致输入格式(bit向量或数值)方面发挥着重要作用。在这篇综述中,

DJJ5210的博客 1万+

JavaScript基础和JS函数和对象

行内 内嵌 外部 简单数据类型说明默认值Number数字型,包含整数值和浮点值0Boolean布尔值类型,如true、false,等价与1和0falseString字符串类型“”UndefinedVar a;声明了变量a但是没有给值,此时a = undefinedundefinedNullVar a = null;声明了变量a为空值null if if…else switch 反复地执

dhnnnna的博客 507

MATLAB地理数据处理 25:植被物候提取及分析模型优化(Savitzky-Golay)

之前我写过一篇使用Savitzky-Golay处理遥感数据,获取地面物候信息的MATLAB代码,但是发现存在一些问题:对物候开始期和物候结束期的阈值设定都为相同值,但是有些研究中,需要根据不同的环境条件,设置不同的物候阈值,所以对其进行相应的修改。

amyniez的博客,欢迎交流讨论 2233

【JavaScript】js基础(函数)

【JavaScript】js基础(函数)

“欢迎来到我的个人博客,我是一名热爱前端技术、致力于提升用户体验的前端开发工程师。” 714

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1328

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 259

【JavaScript基础】JS函数

函数定义、调用、参数、返回值、作用域

DUMG 1036

使用LabVIEW创建和分析柱状图:从基础绘制到高级数据分析的完整指南

LabVIEW,全称为Laboratory Virtual Instrument Engineering Workbench,是由美国国家仪器公司(National Instruments, NI)开发的一款图形化编程语言。自1986年首次推出以来,LabVIEW凭借其强大的数据采集、分析和控制能力,在工程、科研、教育等领域得到了广泛应用。与传统的文本编程语言不同,LabVIEW采用了图形化编程方式,用户通过连接不同的函数节点来实现复杂的逻辑和算法。

qq_38334677的博客 776

js封装函数_JavaScript基础-如何封装函数来改变元素的位置

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!大家好!我是/小郑搞码事/的小郑今天给大家分享JavaScript的基础知识-改变元素的位置。没错,用JS实现过动画的同学都应该了解一点,简单来说,动画就是让元素的位置随着时间而不断地发生变化。所以改动元素位置就成了第一步。今天讲解的例子,DOM结构及简略样式如下:// 样式#message{ position: relativ...

weixin_39720807的博客 238

Oracle EBS FA 创建成批增加执行时间长且报错

摘要 Oracle EBS系统在执行"创建成批增"请求时出现长时间运行并报错(ORA-00603和ORA-03114)。

陈显平的专栏-Oracle EBS 174

人形机器人构成及成本估算(附报告)

这些执行器本身由螺杆、减速器、电机、传感器、滚珠轴承和编码器等组件构成。实现线性与旋转运动互转。人形机器人的运动系统可以由电驱动、液压驱动或气动驱动组成,但由于电驱动具有更高的精度和更快的响应速度,正在成为主流设计方案。执行器:NSK、THK、Harmonic Drive、Leaderdrive、Nidec、Moons。由螺杆、减速器、电机、传感器、轴承和编码器组成(如上为Tesla Optimus执行器设计示意)。传感器:Keyence、Robosense、Sensata、ATI、TE、Sony。

具身机器人和通用AI 1778

JavaScript基础语法及函数

书写语法会了,变量是一门编程语言比不可少的,所以接下来我们需要学习js中变量的声明,在js中,变量的声明和java中还是不同的。html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习JavaScript,这门语言会让我们的页面能够和用户进行交互。提供资料进行效果演示,通过浏览器打开,我们点击主题5按钮,页面的主题发生了变化,所以js可以让我们的页面更加的智能,让页面和用户进行交互。同样,js代码也是书写在html中的,那么html中如何引入js代码呢?

actavy的博客 1391

magic-api的鉴权机制配置 (附实战代码)

引入magic-api及相关数据库驱动依赖 配置yml文件和编辑器JS文件 实现登录鉴权逻辑,包括用户验证和Token处理 接口鉴权拦截器设计,确保接口访问安全性 文章提供了完整的代码示例,帮助开发者快速集成magic-api框架并实现权限控制功能。

码农研究僧的博客 228

JavaScript基础之函数

JS函数基础函数定义函数调用arguments 对象属性 函数定义 静态方法 [ ] 表示optional function funcName ([参数列表]) { 函数体; [return [函数返回值]] } 动态匿名方法 var 函数名 = new Function(["参数列表"], "函数体"); 直接定义方法 函数名 = function([参数列表]) {函...

devin_xin的博客 320

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaScript函数基础

这篇文章记录了作者从Java后端开发转学JavaScript函数的过程。文章从最基础的函数声明开始,逐步介绍了带参数的函数、返回值、函数表达式和箭头函数的写法,并通过一个简单的计算器示例展示函数的实际应用。作者强调了反复练习的重要性,建议初学者先掌握基本语法再学习更简洁的写法。全文以初学者的视角,用简单易懂的语言和示例,分享了学习JavaScript函数的心得和方法。

m0_68705118的博客 311

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【javaScript数组,函数】的基础知识点

本文主要讲解js的数组,函数,基础知识点总结

qq_201729558 1651

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JS函数基础

目录 什么是函数 作用域  声明提前 按值传递 全局函数 分支结构 循环 内置对象/包装类型 String 正则表达式 RegExp Math Date 什么是函数 什么是函数:函数又叫方法,在程序里面函数是用来执行某些特定功能的代码。为了减少重复使用代码,可以把特定功能的代码做成函数,需要使用时拿出来调用 这里和大家解释一下函数与事件的区别: 事件是在特定条件下...

一个减肥的小胖子 2478

JavaScript(JS引入方式,JS基础语法,JS函数,JS对象,JS事件监听)

JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言,是用来控制网页行为的,它能使网页可交互。

Cupid_kl的博客 1647

【JS】基础篇之带你走进JavaScript的函数

1.什么是函数   函数(function)是一段预定义好,并且可以被反复使用的代码块。 2.函数的声明   1)普通函数 function 函数名(){ 语句块; }   2)带参函数 function 函数名(参数列表){ //可以由0或多个参数的名称来组成,多个参数的话中间用 , 隔开定义函数时的参数列表,都称为“形参” 语句块; ...

愿历尽千帆,仍保持最初的热爱,奔赴每一场山海,一如既往鲜活而明亮~ 645

JavaScript笔记整理3 -- JS基础概念之 变量与函数

JavaScript笔记整理3 -- JS基础概念之 变量与函数变量什么是变量声明和定义变量声明变量定义变量变量名的命名规则变量的数据类型typeof 方法基本(标量)数据类型字符串型String数值型类型Number布尔型Boolean未定义型undefined空型null复合数据类型对象Object数组Array变量数据类型的转换自动转换强制转换函数1:`Boolean(`变量名`)`函数2:...

DonkeyL's 346

JavaScript的认识及基础语法--变量,函数

JavaScript的认识及基础语法–变量,函数 JAVAscript 特点: 1.轻量 2.可插入HTML页面编程代码 3.插入HTML后,可用所有浏览器执行 javascript又叫ECMAscript5 ECMAscript6 ECMAscript7 es5 es6 es7 js是一个编程语言 web 页面上 JS嵌入网页的方式 1.内嵌(在head或者body里面内嵌都是可以的,要注意代码是否会报错) 2.外部引入(引入外部文件 在head或者body) JS的注释 单行注释:// 块注释:

Null_Robot的博客 303

js基础--javascript基础概念之函数

js基础--javascript基础概念之函数引用w3c介绍:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。JavaScript 函数语法函数就是包裹在花括号中的代码块,前面使用了关键词 function:function functionname(){这里是要执行的代码}当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时)...

weixin_34209851的博客 113

js函数基础

JavaScript中常见的函数定义方式有4种,不同方式适用场景不同,需灵活选择。当一个内部函数被外部函数返回并在外部调用时,内部函数依然能访问外部函数的作用域变量,这种现象就是闭包。此时外部函数的作用域不会被垃圾回收机制回收,而是被内部函数引用。函数提升仅适用于函数声明,函数表达式无提升箭头函数无自己的this,继承外层作用域的this,不可作为构造函数arguments是类数组对象,箭头函数无arguments,需用剩余参数替代默认参数的赋值时机是函数调用时,而非定义时。

A2420734930的博客 1026

Javascript基础——不常用但很有用的js函数

1.1. JavaScript函数 这部分对Extjs中常用的几个JavaScript参数和函数进行说明,它们是arguments、call、apply、caller、callee。这几个函数在普通的JavaScript编程中很少使用,但在Extjs的源码中却经常会碰到,所以先熟悉这几个函数对Extjs的学习有很大的帮助。 1.1.1. arguments arguments是JavaScript函数的隐含对象,它代表正在执行的函数和调用该函数时传入的参数。arguments中存储的是调用该函数时实际

weoln的专栏 1182

javascript的函数基础使用

javascript的函数基础使用 什么是函数 把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在后续开发中可以反复调用。 函数的作用就是封装一段代码,将来可以重复使用,提高了代码复用性。 函数的定义 函数声明 function 函数名() { // 函数体 } 函数表达式 var fn = function () { // 函数体 ...

z742773955的博客 185

Javascript的函数基础知识(全)

系列文章目录 JavaScript关于函数基础知识的总体汇总 文章目录系列文章目录前言一、函数是什么?1.函数的概念:2.函数的说明二、函数的介绍和基本使用1. 函数的基本语法2.函数的命名规范3.函数的调用4.函数体5.函数的封装三、有参数的函数1. 有参数的函数声明和调用2.执行过程3.形参以及实参4关于函数的传参小练习5.关于形参实参一一对应的参照6.函数传参的提升-案例四、有返回值的函数1.有返回值的函数2. 为什么要让函数有返回值3. 用return返回数据五、内置函数1. 什么是内置函数2.内

weixin_54902466的博客 2414
上一篇: JavaScript基础 -- 代理与反射
下一篇: DOM -- 概念、类型、操作
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值