首页 > 编程语言 >NodeJS 函数与作用域

NodeJS 函数与作用域

时间:2023-07-20 15:37:53浏览次数:28  
标签:function console log NodeJS 作用域 return 100 函数

三、函数与作用域

目录

3.1 函数

function 函数名(函数参数) {
    函数体;
    return 返回值;
}
function add(x,y){
    return x+y
}

ret = add(4,5)
console.log(ret)

3.2 函数表达式

函数、匿名函数、函数表达式本质上都是函数对象,只不过函数有自己的标识名字,而匿名函数需要借助其它标识,他们的区别在于,函数会声明提升,而匿名函数不行

  • 函数:有自己的标识名字可以在任意位置调用
  • 匿名函数:必须在声明的行后面才能调用
// 匿名函数
const add = function(x,y) {
    return x+y;
}
console.log(add(4, 5)) // 9


// 有名字的函数表达式
// console.log(sum(5))  // 此处调用会报错,而函数不会
const sum = function _sum(n) {
    if (n==1) return n;
    return n+_sum(--n)
}
console.log(sum(5)) // 15

3.3 高阶函数

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

下面的map函数,可以实现对某一个数组元素进行某种处理,例如:将[1,2,3,4]转为[2,3,4,5]

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

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

使用生成器的办法改写map函数

var map = function* (fn, arr) {
    for (i in arr) {
        yield fn(arr[i]);
    }
}

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

3.4 箭头函数

箭头函数就是匿名函数,他是一中更加精简的格式

  • 如果一个函数没有参数,则使用()=> {console.log(x);return x+1}
  • 如果只有一个参数,那么参数列表可以省略小括号:x=> {console.log(x);return x+1}
  • 如果只有一行,则可以省略大括号和return: x=>x+1
  • 有return必须有{},两个是成对出现的
var map = function* (fn, arr) {
    for (i in arr) {
        yield fn(arr[i]);
    }
}

// 下面三行等价
let newarr1 = map(function(x) {return x+1}, [1,2,3,4])
let newarr2 = map((x) => {return x+1}, [1,2,3,4])
let newarr3 = map(x => x+1, [1,2,3,4])

3.5 函数参数

3.5.1 普通参数

一个参数占一个位置,支持默认参数,函数只做参数位置的对应,对参数的个数不限制,多穿少传都不会报错

const foo = function (x,y) {
    console.log(x,y);
}

foo(100)
foo(100,200,300)
foo(y=100,x=200)
console.log("-----------------------------")
const bar = function (x=100,y) {
    console.log(x,y);
}
bar(400)
bar(400, 100)
bar('a', 'b', 'c')

输出结果:
100 undefined
100 200
100 200
-----------------------------
400 undefined
400 100
a b

3.5.2 可变参数

js 使用 ... 表示可变参数

  • es6 之前使用 arguments对象将所有参数组装程一个键值对字典保存
  • es6 开始,不推荐使用arguments
const sum = function(...args) {
    console.log(arguments)

    let s = 0
    for (let i in args) {
        s +=args[i]
    }
    return s
}

console.log(sum(1,2,3,4,5))

输出结果:
[Arguments] { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }
15

3.5.3 参数结构

使用 ... 解构

const add = (x, y) => {console.log(x, y)}

add(...[100])
add(...[100,200])
add(...[100,200,300])

输出结果:
100 undefined
100 200
100 200

3.6 函数返回值

python中可以通过 return 1,2 返回一个二元组,但是js只能返回逗号表达式中最后一个值

a = (x=5, y=6, true)
console.log(a)

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

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

输出结果:
true
test
ok

3.7 作用域

  • x=100: x可以突破块或函数作用域称为一个全局变量,在严格模式下会报错"use strict"
  • let:let声明的变量为局部变量,不能进行声明提升,推荐使用
  • var: var声明的变量可以突破块作用域,但是不能突破函数作用域
function test() {
    a = 100;
    var b = 200;
    let c = 300;
    {
        console.log( a)
        console.log( b)
        console.log( c)
    }
}

test()
console.log("------------")
console.log(a)
// console.log(b)  // 不可见
// console.log(c) //不可见

输出结果:
100
200
300
------------
100
if(1) {
    a = 100;
    var b = 200;
    let c = 300;
    {
        console.log( a)
        console.log( b)
        console.log( c)
    }
}
console.log("-------------")
console.log(a)
console.log(b)
// console.log(c) 不可见

标签:function,console,log,NodeJS,作用域,return,100,函数
From: https://www.cnblogs.com/kntvops/p/17568535.html

相关文章

  • NodeJS 基础语法
    一、NodeJS基础语法目录一、NodeJS基础语法1.1安装1.2注释1.3常量和变量1.4数据类型1.5字符串1.6转义字符1.7数值1.8运算符1.9生成器表达式1.1安装下载镜像地址:阿里云镜像地址:https://npmmirror.com/开发文档MDN:https://developer.mozilla.org/zh-CN/doc......
  • NodeJS 控制语句
    二、控制语句目录二、控制语句2.1语句块2.2流程控制2.2.1条件分支2.2.2switch-case分支语句2.2.3for循环2.2.4while循环2.2.5do-while循环2.2.6for-in循环&for-of2.2.7break&continue2.1语句块JS使用大括号构成语句块,let只能在块作用域内可见functionfn(){......
  • oracle trim函数除去空格
    官网语法图TRIM([{{LEADING|TRAILING|BOTH}[trim_character]|trim_character}FROM]trim_source)leading:开头字符trailing:结尾字符both:开头和结尾字符trim_character:去除的字符trim_source:修剪源......
  • NodeJS对象模型
    四、JS对象模型目录四、JS对象模型定义类字面声明方式定义ES6之前-构造器class关键字构建重写方法静态属性静态方法this的坑显示传入-thatES3引入apply、call方法ES5引入bind方法-常用ES6引入支持this的箭头函数-推荐高阶对象、高阶类、或称Mixin模式继承实现高阶对象的实......
  • java三角函数公式
    Java三角函数公式引言三角函数是数学中的重要概念,它们在计算机科学和其他领域中经常使用。在Java中,可以使用Math类中的静态方法来计算常见的三角函数值。本文将介绍Java中的三角函数公式,并提供代码示例。正弦函数(sinefunction)正弦函数是三角函数中最常见的一种。它表示一个角......
  • 反三角函数
    f(x)=sin(x)的逆函数y=asin(x),定义域[-1,1],值域[-pi/2,pi/2]+n*pi,n=0g(x)=cos(x)的逆函数y=acos(x),定义域[-1,1],值域[0,pi]+n*pi,n=0t(x)=tan(x)的逆函数y=atan(x),定义域R,值域[-pi/2,pi/2]+n*pi,n=0 基本关系式:sin(x)=cos(pi/2-x),sin(x)^2+cos(x)^2=1,tan(......
  • 1006-Hive的自定义UDF函数
    hive可以任意定义一个函数,然后该函数放到hive的classpath下,在进入hive中,使用该命令操作场景:设中国移动的用户在商城上下单,下单记录的主要字段包括订单号  手机号码       商品编码     商品数量     渠道10000  18810637891......
  • mysql5.7 创建函数索引
    MySQL5.7创建函数索引介绍MySQL5.7版本引入了函数索引的功能,它可以提升查询性能,特别是在一些复杂的查询场景下。本文将介绍什么是函数索引,如何创建函数索引以及一些使用函数索引的示例。什么是函数索引?函数索引是在数据库表的一列上创建的索引,该列存储了函数的计算结果,而不......
  • mysql-查询数据库中所有的函数定义
    MySQL查询数据库中所有的函数定义在MySQL中,函数是一种自定义的代码块,它接受输入参数并返回一个结果。函数可以用于简化复杂的查询操作,提高代码的可重用性。在本文中,我们将介绍如何使用MySQL查询数据库中所有函数的定义。查询函数定义要查询数据库中所有的函数定义,我们可以使用......
  • linux 中awk命令getline函数实现从内部读取文件内容
     001、[root@PC1test02]#lsa.txtb.txt[root@PC1test02]#cata.txt##测试数据123456[root@PC1test02]#catb.txt##测试数据111213141516[root@PC1test02]#awk'{printf"%s",$0;getline<"b.txt";p......