JavaScript基础(四)函数

简介: 函数函数的定义//第一种:(函数的声明)第一种定义方法最强大,定义完毕后,在哪里使用都可以,无位置限制。function fn1(){ console.log("我是第一种定义方法!");}//第二种(函数表达式:匿名函数) :后两种定义方法是有局限性的。

函数

函数的定义

//第一种:(函数的声明)第一种定义方法最强大,定义完毕后,在哪里使用都可以,无位置限制。
function fn1(){
    console.log("我是第一种定义方法!");
}

//第二种(函数表达式:匿名函数) :后两种定义方法是有局限性的。(使用函数必须在定义函数之后)
var fn2 = function (){
    console.log("我是第二种定义方法!");
};  // 注意分号

function (){
   console.log("我是第二种定义方法!");
}();  // 第二种方式的调用方式之一:函数的自调用

//第三种
var fn3 = new Function("console.log('我是第三种定义方法!')");

函数的调用

函数名();

函数名

  • 要遵循驼峰命名法。
  • 不能同名(函数重载),否则后面的函数会覆盖前面的函数。
//打印函数名,就等于打印整个函数。
console.log(fn);
//打印执行函数,就等于打印函数的返回值。
console.log(fn()); 

形参和实参

  • 形参不需要写 var.
  • 形参的个数和实参的个数可以不一致 。

返回值

1. 如果函数没有显示的使用 return 语句 ,那么函数有默认的返回值:undefined
2. 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined.

变量和作用域

全局变量:在 script 使用 var定义的变量和没有 var 的变量(所有的 script 共享其全局性,js里面没有块级作用域概念,只有全局作用域和局部作用域)。

隐式全局变量:在 script 没有 var 的变量。

function fn(){
  var a = b = c = 1;       // b和c就是隐式全局变量(等号)
  var a = 1; b = 2; c = 3;   // b和c就是隐式全局变量(分号)
  var a = 1 , b = 2 , c = 3;  // b和c就不是隐式全局变量(逗号)
}

(全局变量是不能被删除的,隐式全局变量是可以被删除的)

var num1 = 10;
num = 20;
delete num1;
delete num2;
console.log(typeof num1); // number
console.log(typeof num2); // undefined

局部变量函数内部用 var 定义的变量和形参。

变量声明提升(预解析)

作用:查看语法错误。js的解析器在页面加载的时候,首先检查页面上的语法错误。把变量声明提升起来。变量声明提升和函数整体提升。

变量的提升

只提升变量名,不提升变量值。

consolas.log(aaa);// 打印的结果是 undefined ,因为只提升变量名,不提升变量值。
var aaa = 111; 

在函数范围内,照样适用。

函数的提升

function 直接定义的方法:整体提升(上面说的第一种函数定义的方法).

fn();

var aaa = 111;
function fn(){
    //变量声明提升在函数内部照样实用。
    //函数的就近原则(局部变量作用域),打印的aaa不是111,而是 undefined。
    console.log(aaa); // undefined
    var aaa = 222;
}

预解析会分块:

多对的 script 标签中函数重名的话,预解析不会冲突。也就是预解析的作用域是每一个的 script 标签。

var先提升,function再提升:

示例:

console.log(a); // 输出a函数体
function a() {
    console.log("aaaaa");
}
var a = 1;
console.log(a); // 输出1

打印第一个结果的时候,var会提升,之后 function 再提升,但是函数a和变量a重名,function的a在后面覆盖掉变量a,所以第一个输出 a 函数体.

第二个前面var a = 1;提升之后,这个位置就相当于只有 a = 1; 赋值,所以第二个打印1.

匿名函数

//1.直接调用
(function (){
    console.log(1);
})();

//2.绑定事件
document.onclick = function () {
    alert(1);
}

//3.定时器
setInterval(function () {
    console.log(444);
},1000);
目录
相关文章
|
1天前
|
JavaScript 前端开发
在JavaScript中,函数原型(Function Prototype)是一个特殊的对象
JavaScript中的函数原型是一个特殊对象,它为所有函数实例提供共享的方法和属性。每个函数在创建时都有一个`prototype`属性,指向原型对象。利用原型,我们可以向所有实例添加方法和属性,实现继承。例如,我们定义一个`Person`函数,向其原型添加`greet`方法,然后创建实例`john`和`jane`,它们都能调用这个方法。尽管可以直接在原型上添加方法,但推荐在构造函数内部定义以封装数据和逻辑。
7 1
|
3天前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指什么
【5月更文挑战第9天】JavaScript中的异步函数用于处理非立即完成的操作,如定时器、网络请求等。它们可通过回调函数、Promise或async/await来实现。示例展示了如何使用async/await模拟网络请求:定义异步函数fetchData返回Promise,在另一异步函数processData中使用await等待结果并处理。当fetchData的Promise解析时,data变量接收结果并继续执行后续代码。注意,调用异步函数不会阻塞执行,而是会在适当时间点继续。
10 0
|
3天前
|
自然语言处理 JavaScript 前端开发
在JavaScript中,this关键字的行为可能会因函数的调用方式而异
【5月更文挑战第9天】JavaScript中的`this`关键字行为取决于函数调用方式。在非严格模式下,直接调用函数时`this`指全局对象,严格模式下为`undefined`。作为对象方法调用时,`this`指向该对象。用`new`调用构造函数时,`this`指向新实例。通过`call`、`apply`、`bind`可手动设置`this`值。在回调和事件处理中,`this`可能不直观,箭头函数和绑定方法可帮助管理`this`的行为。
10 1
|
3天前
|
JavaScript 前端开发 网络架构
JavaScript中的箭头函数是一种新的函数表达形式
【5月更文挑战第9天】JavaScript的箭头函数以简洁语法简化函数定义,其特性包括:1) 不绑定自身this,继承上下文的this,适合回调和事件处理;2) 没有arguments对象,需用剩余参数语法访问参数;3) 不能用作构造函数,无new调用;4) 没有prototype属性,不支持基于原型的继承。箭头函数在特定场景下优化了this处理,但使用时要注意与普通函数的差异。
7 2
|
5天前
|
JavaScript 前端开发
js的一些内置函数
js的一些内置函数
7 1
|
5天前
|
JavaScript 前端开发 索引
js的includes函数
js的includes函数
11 1
|
5天前
|
JavaScript 安全 前端开发
js的map函数
js的map函数
7 0
|
5天前
|
JavaScript 前端开发
js的filter函数
js的filter函数
9 1
|
5天前
|
JavaScript 前端开发
js的函数
js的函数
7 0
|
5天前
|
JavaScript 前端开发
js的join函数
js的join函数
8 1