js函数相关知识详解

本文围绕JavaScript函数展开,介绍了函数声明、表达式及构造函数的写法与注意点,探讨了函数提升、属性与方法、作用域等特性,还阐述了函数参数省略、值的传递方式,以及arguments、立即执行函数表达式和eval函数的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数声明

  • function 命令
function fnn (name) {
  console.log(name);
}
  • 函数表达式
const fnn = function (name) {
  console.log(name);
}

注意点

  • 函数表达式的写法相当于将一个匿名函数赋值给变量。
  • 函数表达式声明的函数,function 命令后面不带有函数名。如果加上函数名,
    该函数名只在函数体内部有效,在函数体外部无效
const fnn = function fx (name) {
  console.log(name);
  console.log(fx);
}

/**
 输出 fnn 以及
 ƒ fx(name) {
     console.log(name);
     console.log(fx);
   }
 */
fnn('fnn')

// Uncaught ReferenceError: fx is not defined
fx('fx')

加入函数名出现报错,有函数名称则显示函数名称

const fnn = function (name) {
  console.log(name);
  throw Error(1)
}

fnn('fnn')

// 控制台报错测试

const fnn = function fx (name) {
  console.log(name);
  throw Error(1)
}

fnn('fnn')

在控制台的显示如下

使用函数名称实现自调用

const fnn = function fx (name) {
  console.log(name);
  if (name === 'fx') {
    return
  }
  fx('fx')
}

fnn('fnn')

输出如下

  • Function 构造函数
const fnn = new Function(
  'name',
  'age',
  'sex',
  'return \'name:\' + name + \' age:\' + age + \' sex:\' + sex'
);

// name:fx age:18 sex:girl
console.log(fnn('fx', 18, 'girl'));

// 等同于
function copyFnn(name, age, sex) {
  return 'name:' + name + ' age:' + age + ' sex:' + sex
}

const fx = Function(
  'name',
  'age',
  'sex',
  'return \'name:\' + name + \' age:\' + age + \' sex:\' + sex'
);

// name:fnn age:18 sex:girl
console.log(fx('fnn', 18, 'girl'));

测试如下

上述代码中 Function 构造函数接受三个参数,除了最后一个参数是 fnn 函数的“函数体”,其他参数都是 fnn 函数的参数。

  • 只有最后一个参数会被当做函数体,如果只有一个参数,该参数就是函数体。
  • Function 构造函数可以不使用 new 命令,输出结果一致

函数提升相关

函数提升相关

函数的属性与方法

  • name 属性
function fnn() {}
// fnn
console.log(fnn.name);

var fx = function () {};
// fx
console.log(fx.name);

var wfly = function fly () {};
// fly
console.log(wfly.name);
  • length 属性

函数的 length 属性返回函数预期传入的参数个数,即函数定义之中的参数个数

它的 length 属性就是定义时的参数个数。不管调用时输入了多少个参数

function fnn(name, age, sex) {
  console.log(fnn.length);
}

// 输出 3
fnn()
  • toString() 方法

返回一个字符串,内容是函数的源码

function fnn(name, age, sex) {
  console.log(fnn.length);
}
// 输出函数源码
console.log(fnn.toString());

原生的函数,toString() 方法返回 function (){[native code]}

// 'function isNaN() { [native code] }'
console.log(isNaN.toString());

函数作用域相关

函数作用域

函数参数的省略

如下代码所示,函数调用时省略的参数都是 undefined,如果一定要省略靠前的参数,只有显式传入 undefined

function fnn(name, age, sex) {
  console.log(name, age, sex);
}
// fnn undefined undefined
fnn('fnn')

// undefined 18 undefined
fnn(undefined, '18')

同名参数

如果有同名的参数,则取最后出现的那个值。

function fnn(name, name) {
  console.log(name);
}
// undefined
console.log(fnn('fnn'));

// 18
console.log(fnn(undefined, '18'));

值的传递

function fnn(obj, money) {
  obj.age = 8
  money = 1000
}

const messgae = {
  name: 'wfly',
  age: 18
}

const num = 100

fnn(messgae, num)

// {name: 'wfly', age: 8}
console.log(messgae);
// 100
console.log(num);

如上述所示,message 的值被修改了,但是 num 的值没有被修改。

  • 函数参数如果是原始类型的值(数值、字符串、布尔值),传递方式是传值传递。这意味着,在函数体内修改参数值,不会影响到函数外部。
  • 如果函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递。也就是说,传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
  • 如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
    这是因为,形式参数(函数的参数)的值实际是外部参数的地址,重新对形式参数赋值导致形式参数指向另一个地址,保存在原地址上的值当然不受影响。

arguments详解

arguments详解

立即执行函数表达式(IIFE)

立即执行函数表达式

eval函数

eval函数

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据。数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球的数据,数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据的免费下载服务,你可以根据自己的需求选择合适的网站进行下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wflynn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值