Search K
Appearance
Appearance
在 JavaScript 中,下列有关于自定义函数的说法错误的是()
A: 自定义函数的关键字是“function”
B: 自定义函数必须带有参数
C: 自定义函数被调用时接受的参数可以是常量、变量或其他表达式
D: 自定义函数返回结果的关键字是“return”答案是 B: 自定义函数不一定必须带有参数。
在 JavaScript 中,可以定义不需要任何参数的函数。
jsfunction sayHello() { console.log("Hello!"); }1
2
3
有以下代码 它的结果是()
function fn(num1, num2) {
return num1 + num2;
}
alert(fn(10, 20, 30));A: 30;
B: 60;
C: undefined;
D: null;答案是 A:30。
函数 fn 只接收两个参数,而在调用时传入了三个参数,第三个参数被忽略,函数返回的结果是前两个参数的和,即 30。
下列关于函数的参数 描述正确的是()【多选题】
A: 形参表示形式上的参数 不是一个具体的值
B: 函数的参数我们可以划分为形参和实参
C: 实参就是函数调用时传入小括号内的真实数据
D: 形参和实参的个数一定要匹配,否则一定会报错答案是 ABC。
选项 A:形参是在函数定义时声明的参数,它只是函数定义时的占位符,表示函数在调用时需要接收的参数。形参不是具体的值,而是在函数调用时才会被传入具体的实参值。
选项 B:函数的参数分为形参和实参,形参是函数定义时声明的参数。
选项 C:实参是函数调用时传入的具体值。
选项 D:形参和实参的个数可以不匹配,但是需要注意函数内部的处理,如果实参个数少于形参个数,则多余的形参值为
undefined;如果实参个数多于形参个数,则多余的实参值被忽略。
下列关于函数的描述中,错误的是()
A: 函数可以返回一个值
B: 函数可以没有参数
C: 定义函数时需要返回类型
D: 函数可以没有 return 关键字答案是 C。
在 JavaScript 中,定义函数时不需要指定返回类型,函数返回值的类型由函数内部的执行结果决定。
下列关于函数的描述中,错误的是()
A: 函数封装了一段可以被重复执行的代码块
B: 通过函数的封装 我们可以大量的复用封装好的功能
C: 函数让我们的代码更加复杂化
D: 函数能够多次调用答案是 C。
函数的主要作用是封装可重用的代码块,使代码更加模块化、可维护、可扩展,提高了代码的复用性和可读性。虽然在某些情况下,函数的使用可能会增加代码的复杂度,但这并不是函数的本质特性,而是函数使用不当或设计不合理造成的。
关于 JavaScript 的作用域,下列描述错误的是()
A: 根据作用域的不同,我们可以把变量分为全局变量和局部变量
B: 函数的形参也可以看做是局部变量,局部变量只能在函数内部使用
C: 全局变量在浏览器关闭时才会被销毁,局部变量在代码块运行结束后就会被销毁
D: 在函数内部没有声明直接赋值的变量也属于局部变量答案是 D。
在函数内部没有声明直接赋值的变量也属于局部变量是错误的。在 JavaScript 中,如果在函数内部没有使用
var、let、const关键字声明变量,直接给变量赋值,那么该变量会被自动声明为全局变量。
下面关于函数的返回值,描述正确的是:()
A: 任何函数必须要有 return 返回值
B: 函数中可以使用 break 来结束函数的执行
C: 函数中 return 后面的语句不再执行
D: 函数可以使用多个 return 返回多个值答案是 C。函数中 return 后面的语句不再执行是正确的。当函数执行到
return语句时,函数会立即停止执行,并将return后面的值作为函数的返回值返回。因此,return之后的语句不会再被执行。其他选项是错误的:
A:并非所有函数都必须要有返回值,例如只是用来输出一些信息的函数就不需要返回值。
B:函数中使用break只能用于循环语句和switch语句中,不能用于结束函数的执行。
D:虽然函数可以使用多个return语句,但是一个函数只能返回一个值,当return语句被执行时,函数的执行会立即停止,并将return后面的值作为返回值返回。
下面关于函数的返回值,描述错误的是:()
A: 任何函数必须要有 return 返回值
B: 如果函数没有返回值,那么这个函数的调用结果是 undefined
C: 通过 return 可以给函数指定返回值
D: return 可以直接使用,表示函数的结束答案是 A。任何函数必须要有 return 返回值是错误的。在 JavaScript 中,函数不一定要有返回值。如果函数没有使用
return语句或者return后面没有值,那么函数的返回值是undefined。其他选项是正确的:
B:如果函数没有返回值,那么函数的调用结果是
undefined。
C:通过return可以给函数指定返回值,return后面的值就是函数的返回值。
D:return可以直接使用,表示函数的结束,当函数执行到return语句时,函数会立即停止执行。
下列的函数声明中,正确的是:()
A: Function add(){}
B: function class(){}
C: function fn(1,2){}
D: function fn(a,b){}答案是 D。
function fn(a,b){}是正确的。函数声明需要使用function关键字,紧接着是函数名和一对圆括号,其中圆括号内可以包含多个参数名,多个参数名之间使用逗号隔开,而参数名必须是合法的标识符。因此,选项 D 是正确的函数声明方式。其他选项是错误的:
A:函数名需要使用合法的标识符,因此
add不是合法的函数名。
B:class是 JavaScript 中的关键字,不能用作函数名。
C:函数声明中的参数名必须是合法的标识符,因此1和2不是合法的参数名。
下面关于立即执行函数说法错误是:()
A: 立即执行函数之间必须用分号间隔开
B: 立即执行函数的作用是为了减少变量名冲突
C: 立即执行函数可以添加函数名
D: 立即执行函数使用非常少,推荐尽量不用答案是 D。立即执行函数使用非常少,推荐尽量不用是错误的。立即执行函数是 JavaScript 中非常常用的一种模式,可以用来创建私有作用域,避免变量名冲突等问题,因此在实际开发中经常会用到。
其他选项是正确的:
A:立即执行函数之间必须用分号间隔开,否则可能会出现语法错误。
B:立即执行函数的作用之一是为了减少变量名冲突,通过创建私有作用域,让变量不会被外部访问到,从而避免变量名冲突等问题。
C:立即执行函数可以添加函数名,函数名可以在函数内部使用,但是在外部无法访问。
求以下函数运算的结果()
function fn() {
console.log(100);
}
console.log(fn());A: 报错
B: 100 100
C: 100 undefined
D: undefined undefined答案是 C。
函数
fn中使用了console.log方法输出了100,但是函数没有返回值,因此函数调用的结果是undefined。在第二行代码中,使用
console.log(fn())输出函数的返回值,即undefined,再加上函数内部输出的100,因此最终输出结果为100 undefined。
以下代码运行后 结果为()
fn(1);
let fn = function (a) {
alert(a);
};A: 1;
B: 程序报错;
C: alert(1);
D: undefined;答案是 B。程序报错(Uncaught ReferenceError: fn is not defined)。
函数调用前未定义,因此会报错。
请问以下代码是几?()
function f1() {
let num = 123;
function f2() {
console.log(num); //结果是几?
}
f2();
}
let num = 456;
f1();A: 123
B: Uncaught ReferenceError: num is not defined
C: undefined
D: 456答案是 A。在函数
f1内部定义了一个变量num,并在函数内部定义了另一个函数f2,在f2中输出了变量num的值。在调用f1函数之前,全局作用域中也定义了一个变量num,但是这个变量在f2中没有被使用到,因此不会影响结果。因此,最终输出结果是123。
请看以下代码,并说出执行的流程
function printfInput(content) {
// 将用户输入的内容,在页面中显示
document.write(content);
}
let constr = prompt("请输入内容");
printfInput(constr);这段代码的执行流程是:
- 定义了一个名为
printfInput的函数,该函数接收一个参数content,并将该参数的值输出到页面上。- 使用
prompt弹出一个对话框,提示用户输入内容,并将用户输入的内容赋值给变量constr。- 调用函数
printfInput,并将变量constr作为参数传入该函数。- 函数
printfInput将参数constr的值输出到页面上。因此,整个代码的作用是:获取用户输入的内容,并将该内容输出到页面上。
目标: 求和函数封装练习
要求:
function getSum(num1, num2) {
return num1 + num2;
}
console.log(getSum(1, 2));目的: 封装函数,复习函数的基本写法。
需求: 实现两个数的值交换 (函数版本)
分析:
changeNum(1,2)第一个值的结果是2 第二个值的结果是1function changeNum(num1, num2) {
let temp = num1;
num1 = num2;
num2 = temp;
console.log("第一个值的结果是" + num1 + " 第二个值的结果是" + num2);
}
changeNum(1, 2);
changeNum(5, 10);
changeNum(-1, 0);目的: 复习函数的声明与调用
题目: 封装余额函数
要求:
function getBalance() {
let balance = +prompt("请输入银行卡余额:");
let foodCost = +prompt("请输入当月食宿消费金额:");
let lifeCost = +prompt("请输入当月生活消费金额:");
let remaining = balance - foodCost - lifeCost;
return remaining;
}
let result = getBalance();
document.write("银行卡剩余金额为:" + result);目标: 封装一个函数,可以求任意数组的和 或 平均值
要求:
handleData 处理数据的意思function handleData(arr, isSum = true) {
if (isSum) {
return arr.reduce((acc, cur) => acc + cur, 0);
} else {
return arr.reduce((acc, cur) => acc + cur, 0) / arr.length;
}
}
const arr = [1, 2, 3, 4, 5];
console.log(handleData(arr)); // 求和,输出 15
console.log(handleData(arr, true)); // 求和,输出 15
console.log(handleData(arr, false)); // 求平均值,输出 3需求:封装 some 函数查看数组是否存在某个元素。
例如检测 香蕉 是否存在于 数组 [' 苹果 ', ' 香蕉 ', ' 橘子 ', ' 荔枝 ', ' 梨子 '] 中,返回结果是 true
格式如下:
function some(ele, arr = []) {
// 里面写业务逻辑
}
let re = some("荔枝", ["苹果", "香蕉", "橘子", "荔枝", "梨子"]);
console.log(re); // true
let re1 = some("榴莲", ["苹果", "香蕉", "橘子", "荔枝", "梨子"]);
console.log(re1); // falsefunction some(ele, arr = []) {
return arr.includes(ele);
}
let re = some("荔枝", ["苹果", "香蕉", "橘子", "荔枝", "梨子"]);
console.log(re); // true
let re1 = some("榴莲", ["苹果", "香蕉", "橘子", "荔枝", "梨子"]);
console.log(re1); // false需求:封装 findeIndex 函数返回查找元素在数组中的索引号。
例如检测 香蕉 数组 [' 苹果 ', ' 香蕉 ', ' 橘子 ', ' 荔枝 ', ' 梨子 '] 中,返回结果是 1
格式如下:
// 封装函数返回元素的下标 [1, 5, 10, 22, 8, 7]
// 1. 封装函数 findIndex,传递 2 个参数 元素、数组
function findIndex(ele, arr = []) {
// 里面写业务逻辑
}
let index1 = findIndex(10, [1, 5, 10, 22, 8, 7]);
console.log(index1); // 2
let index2 = findIndex(8, [1, 5, 10, 22, 8, 7]);
console.log(index2); // 4
let index3 = findIndex(88, [1, 5, 10, 22, 8, 7]);
console.log(index3); // -1function findIndex(ele, arr = []) {
for (let i = 0; i < arr.length; i++) {
if (ele === arr[i]) {
return i;
}
}
return -1;
}
let index1 = findIndex(10, [1, 5, 10, 22, 8, 7]);
console.log(index1); // 2
let index2 = findIndex(8, [1, 5, 10, 22, 8, 7]);
console.log(index2); // 4
let index3 = findIndex(88, [1, 5, 10, 22, 8, 7]);
console.log(index3); // -1function findIndex(ele, arr = []) {
return arr.indexOf(ele);
}
let index1 = findIndex(10, [1, 5, 10, 22, 8, 7]);
console.log(index1); // 2
let index2 = findIndex(8, [1, 5, 10, 22, 8, 7]);
console.log(index2); // 4
let index3 = findIndex(88, [1, 5, 10, 22, 8, 7]);
console.log(index3); // -1function findIndex(ele, arr = []) {
return arr.findIndex((item) => item === ele);
}
let index1 = findIndex(10, [1, 5, 10, 22, 8, 7]);
console.log(index1); // 2
let index2 = findIndex(8, [1, 5, 10, 22, 8, 7]);
console.log(index2); // 4
let index3 = findIndex(88, [1, 5, 10, 22, 8, 7]);
console.log(index3); // -1// bug:请你找到代码返回 NaN 的原因,并进行修改
// 请返回一个数字型的结果 可以使用默认参数或者逻辑中断都可以
function fn(x, y) {
console.log(x + y);
}
fn(1);
// 答案
// 当调用函数时只传入了一个参数,而函数中却试图将两个参数相加,此时会返回 NaN
// 因为一个数字和 undefined 相加会得到 NaN。为了避免这种情况,可以在函数中对参数进行判断,如果只有一个参数,则将另一个参数默认设置为 0。
// 解决办法
// function fn(x, y = 0) {
function fn(x = 0, y = 0) {
console.log(x + y);
}
fn(1); // 输出 1// bug:请你找到下面代码的 2 处错误,并进行修改过来
// 任意数组求和案例
function getsumArr(arr) {
let sum = 0;
for (let i = 0; i < arr.legnth; i++) {
sum + arr[i];
}
return sum;
}
console.log(getsumArr([10, 20, 30, 40]));
// 答案
// 1. arr.legnth 应该是 arr.length,即将单词 legnth 修改为 length,否则会导致循环无法正确执行,因为循环条件一直为真。
// 2. sum + arr[i] 应该是 sum += arr[i],即将 + 修改为 +=,否则循环中的每次相加都不会对 sum 进行累加,导致最后的结果为 0。
// 解决办法
function getsumArr(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
console.log(getsumArr([10, 20, 30, 40])); // 输出 100