首页 > 编程语言 >JavaScript 函数、函数构造、函数调用、参数、函数返回值、变量的作用域、预解析

JavaScript 函数、函数构造、函数调用、参数、函数返回值、变量的作用域、预解析

时间:2023-11-04 09:03:03浏览次数:45  
标签:function console 函数 作用域 函数调用 var log

一、函数及函数的构造

函数是一个可重用的代码块,用来完成某个特定功能。每当需要反复执行一段代码时,可以利用函数来避免重复书写相同代码。

函数包含着的代码只能在函数被调用时才会执行,就可以避免页面载入时执行该脚本

简单来说就是一个封装,封装的是一个特定的功能,重复使用

函数的三种定义方法:

Function构造函数定义函数

var 函数名 = new Function(“参数1”,”参数2”,”参数3”……”函数体”);

function语句定义函数

function 函数名 (参数1,参数2……[形参]){
  <语句块>
  return 返回值
}

在表达式中直接定义函数

var 函数名 = function (参数1,参数2,…){函数体};

注意:

函数名的书写规范,不能一数字特殊符号和关键字命名,一般命名方式小驼峰

二、调用函数

1.直接调用

  // //直接调用,window.窗口调用
        // window.show() //show()

2.事件处理中调用

//事件中调用
        //<div onclick="show()">hello</div>

3.将函数的返回值赋给变量

 //将函数的返回值赋给变量
        var t = show()

三、参数

形參:定义函数时,函数名后面()中的参数;JavaScript中的函数允许给行参赋初始值

实参:调用函数时,传递的参数

参数的匹配: 默认情况下,形參和实参是一一对应的 但是当传递的参数个数与函数定义好的参数个数可以不匹配当不匹配时

  • 如果传递的参数个数小于函数定义的参数个数,JavaScript会自动将多余的参数值设为undefined;

  • 如果传递的参数个数大于函数定义的参数个数,那么多余传递的参数将会被忽略掉。

如果传递的参数是一个数组的话,一一对应太过麻烦,我们就用arguments,获取所有实参

 function show (a,b){
            console.log(arguments.length);
        }
 show('guo','yuan')
function Test(a,b){
    alert(typeof(arguments)); // 获得类型
    alert(arguments[1]);      // 获取下标为1的参数值
    alert(arguments.length);  // 获取参数的长度
    alert(arguments.callee);  // 获取函数的所有内容
}
Test("zhang","li");

四、函数的返回值

return特点:
  1)函数内部的值(局部变量),想要在函数外部进行(全局变量)使用,就可以使用return
  2)如果没有return,那么return的返回值默认值undefined
  3)return可以返回值,但是只能返回一个;如果想要返回多个,可以使用数组进行返回
  4)在函数中,只要看到return,就表示函数的结束,后面的代码都不会执行

五、变量作用域

全局变量: 在函数外声明的的变量为全局,在整个JS文档中生效

局部变量: 在函数内用var声明的变量为局部变量,只能在函数内部使用。

局部变量变成全局:
  return 返回
  去除 var 关键词

什么是作用域链

  • 只要在js中创建变量,就会存在作用域【全局作用域】

  • 写在函数内部的被称为局部作用域

  • 如果函数中还有函数,那么在这个作用域中就又可以诞生一个新的作用域

  • 在函数中如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这样一个查找过程形成的链条就叫做作用域链。

六、预解析

预解析,又称之为变量提升,在js代码真正执行之前,进行提前加载,把所有带有var和function的关键字进行预

//预解析:
            var function 
            console.log(fn) // 函数体
            var fn = 10;
            function fn(){
            }
            console.log(fn) // 变量

同时出现变量和函数的提升,在他们两个之前输出的话解析的是函数体,预解析的优先级大于变量的

如果在他们两个之后输出的话解析的是变量,因为根据优先栈内存找到数据的执行代码顺序先找到的var变量

预解析相关案例练习:

// 案例1
var num = 10;
fun();
function fun(){
  console.log(num);
  var num = 20;
}
// 案例二
var num = 10;
function fun() {
    console.log(num);
    var num = 20;
    console.log(num);
}
fun();

// 案例三
var a = 18;
f1();
function f1() {
    var b = 9;
    console.log(a);
    console.log(b);
    var a = 13;
}

// 案例四
console.log(a,b,c);
var a = b = c = 5;

// 案例四
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
    var a = b = c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}
// 案例五
fn();//报错 只预解析“=”左边的,右边的是指针,不参与预解析
var fn=function(){
    console.log(11);
}
// 案例六
function fn(){
    console.log(a);
    a=100;
}
fn();
console.log(a);
//注意:js中,如果在不进行任何特殊处理的情况下,上面的代码报错,下面的代码不再执行

// 案例七
console.log(show);
function show(){
  console.log(123);
}
var show = 10;

// 案例八
function show(){
  console.log(123);
}
var show = 10;
console.log(show);

 

标签:function,console,函数,作用域,函数调用,var,log
From: https://www.cnblogs.com/ljygzyblog/p/JavaScript-9.html

相关文章

  • 如何求函数的对称中心和对称轴|探究拓宽
    预备知识1、多项式函数\(y=f(x)=ax^4+bx^3+cx^2+dx+e\)为奇函数的充要条件是\(a=c=e=0\).分析:由于函数\(f(x)\)为奇函数,故有\(f(-x)+f(x)=0\)恒成立,即\(\bigg[a(-x)^4+b(-x)^3+c(-x)^2+d(-x)+e\bigg]\)\(+\)\(\bigg(ax^4+bx^3+cx^2+dx+e\bigg)=0\)恒成立,即\(2a\cdotx......
  • Python分享之内置函数清单
    Python内置(built-in)函数随着python解释器的运行而创建。在Python的程序中,你可以随时调用这些函数,不需要定义。最常见的内置函数是:print("HelloWorld!")在Python教程中,我们已经提到下面一些内置函数:基本数据类型type()反过头来看看dir()help()len()词典len()文本文......
  • 一些有用的css函数
    var使用自定义的属性值。:root{--main-bg-color:pink;}body{background-color:var(--main-bg-color);}attr使用html上data-*属性引用的文本。<pdata-foo="hello">world</p>p:before{content:attr(data-foo)"";}属性也可以被解析为colo......
  • 实验3—C语言函数应用编程
    1、实验任务1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN806voidprint_text(intline,intcol,chartext[]);//函数声明7voidprint_spaces(intn);//函数声明8voidprint_b......
  • MySQL使用函数、存储过程实现:向数据表快速插入大量测试数据
    实现过程创建表CREATETABLE`user`( `id`INT(11)NOTNULLAUTO_INCREMENT, `name`VARCHAR(20)DEFAULTNULL, `age`INT(3)DEFAULTNULL, `pwd`VARCHAR(20)DEFAULTNULL, `address`VARCHAR(30)DEFAULTNULL, PRIMARYKEY(`id`))ENGINE=INNODBAUTO_INCREMENT=......
  • C++函数重载
    在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是int、float、char、bool等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:voidsw......
  • C++构造函数初始化列表
    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:#include<iostream>usingnamespacestd;classStudent{private:......
  • Net 高级调试之五:如何在托管函数上设置断点
    一、简介今天是《Net高级调试》的第五篇文章。今天这篇文章开始介绍如何在托管方法和非托管方法设置断点,我们要想调试程序,必须掌握调试的一些命令,动态调试的命令,我们在上一篇文章已经讲过了。光有命令也是不行的,要让这些调试命令有用,必须可以在方法上设置断点,然后,再使用......
  • 09Go语言基础之函数
    函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。函数Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。函数定义Go语言中定义函数使用func关键字,具体格式如下:func函数名(参数)(返回值){函数体}......
  • 交叉熵损失函数
    交叉熵损失函数1.基础知识importtorchimportnumpyasnp#自然对数底数eprint("自然对数底数e",np.e)#无穷大print('无穷大',np.inf)#无穷小print('负无穷大',-np.inf)输出:#自然对数底数e2.718281828459045#无穷大inf#负无穷大-infdata=torch.tensor......