从零开始学 Web 之 JavaScript(三)函数

简介: 大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。

大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!

img_25336e0b5504f9a5b326090f41d9dcd7.png

一、函数

1、函数的定义

// 第一种
function fn1(){
    console.log("我是第一种定义方法!");
}

// 第二种
var fn2 = function (){
    console.log("我是第二种定义方法!");
};  // 注意分号

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

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

第一种:(函数的声明)第一种定义方法最强大,定义完毕后,在哪里使用都可以,无位置限制。
第二种:(函数表达式:匿名函数) 后两种定义方法是有局限性的。(使用函数必须在定义函数之后)

2、函数的调用

函数名();

3、函数名

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

4、形参和实参

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

5、返回值

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

6、变量和作用域

全局变量:在 script 使用 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 定义的变量和形参。

6.1、变量声明提升(预解析)

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

6.2、变量的提升

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

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

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

6.3、函数的提升

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.

6.4、匿名函数

作用大致如下:

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

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

//3.定时器
setInterval(function () {
    console.log(444);
},1000);

img_25336e0b5504f9a5b326090f41d9dcd7.png

img_964e5550b9dc423fcb4297d85f09ac10.png

目录
相关文章
|
21天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
21天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
11 0
|
21天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
1月前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=>`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
18 5
|
1月前
|
JavaScript 前端开发 测试技术
使用Selenium执行JavaScript脚本:探索Web自动化的新领域
本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。
45 1
|
1月前
|
JavaScript 前端开发 网络架构
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
17 1
|
1月前
|
前端开发 JavaScript 数据处理
在JavaScript中,什么是异步函数执行的例子
在JavaScript中,什么是异步函数执行的例子
10 0
|
1月前
|
JavaScript
JS封装节流函数
JS封装节流函数
15 0
|
1月前
|
JavaScript 前端开发
javascript箭头函数
javascript箭头函数
|
1月前
|
JavaScript 前端开发
JavaScript函数科里化
JavaScript函数科里化