IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript学习04-函数、作用域、预解析 -> 正文阅读

[JavaScript知识库]JavaScript学习04-函数、作用域、预解析

函数

函数的使用

先声明函数,再调用函数

//声明函数
function 函数名(){
	函数体
}

//调用函数
函数名();

函数不调用不执行

函数声明两种方式

//1. 利用关键字定义
function func(){
	函数体
}
func();

function func(val){
	函数体
}
func(1);
//2. 函数表达式(匿名函数)
var func= function(){
	函数体
}
func();

var func= function(val){
	函数体
}
func(1);

函数表达式声明方式中,func是变量名,func变量存储的值为函数
函数调用必须写在函数表达式下面

函数的参数

形参 定义函数时小括号里添加的参数
实参 调用函数时小括号里添加的参数
传参个数问题:
1.实参个数和形参个数一样,正常输出
2.实参个数大于形参个数,按形参个数取,多余的实参会被忽略
2.实参个数小于形参个数,多余的形参值为undefined,形参的默认值为undefined,相当于只声明不赋值

函数的返回值

return 终止函数,只能返回一个值,如果用逗号隔开返回多个值,只取最后一个
return 语句之后的代码不被执行
没有return 的函数,返回的时undefined

arguments的使用

不确定有多少参数时用arguments获取
arguments是JavaScript中函数的一个内置对象,所有函数都内置了一个arguments对象,存储了所有传递的实参,是一个伪数组
伪数组:可以遍历,具有length属性,按索引存储数据,不具有数组的pop、push方法

function func(){
	console.log(arguments);   //1 2 3
	console.log(arguments.length);   //3
	console.log(arguments[0]);   //1
}
func(1,2,3);

只有函数具有arguments对象

函数的互相调用

function func1(){
	console.log(1);
	func2();
}
function func2(){
	console.log(2);
}

作用域

变量在某个范围内起作用和效果,减少命名冲突
es6之前分为 全局作用域和局部作用域
es6新增块级作用域 if { } for { }

全局作用域

作用于整个script标签或者整个单独的js文件
全局作用域下声明的变量叫做全局变量,在代码任何位置都能使用
在函数内部,没有声明的直接赋值的变量属于全局变量

局部作用域

也叫函数作用域,作用于函数内部
局部作用域下声明的变量叫做局部变量
函数的形参可以看作局部变量

全局变量和局部变量的执行效率

全局变量只有浏览器关闭时才会销毁,局部变量所在的代码块被执行时才被初始化,在程序执行完毕就会销毁

if(3<5){
	var num=10;
 }
console.log(num);   //10

作用域链

内部函数访问外部函数的变量,采取的是链式查找的方式决定取哪个值

var num=10;
function func1(){
	var num=20;
	function func2(){
		console.log(num);  //20
	}
}

预解析

js引擎运行分为两步:预解析和代码执行
预解析:js引擎把所有的var 和 function提升到当前作用域的最前面,分为变量预解析和函数预解析
变量预解析:也叫变量提升,把所有的变量声明提升到作用域最前面,不提升赋值
函数预解析:也叫函数提升,把所有的函数声明提升到当前作用域最前面,不调用函数
代码执行:从上到下执行

预解析案例

console.log(num);
var num=10;    //undefined

//预解析过程
var num;
console.log(num);
num=10;
func();
function func(){
	console.log(111);    //111
}

//预解析过程
function func(){
	console.log(111);    //111
}
func();
func();
var func=function(){
	console.log(222);   //报错
 }

//预解析过程
var func;
func();
func = function(){
	console.log(222);
 }
var num=10;
func();
function func(){
	console.log(num);   //undefined
	var num=20;
}

//预解析过程
var num;
function func(){
	var num;
	console.log(num);
	num=20;
}
num=10;
func();
var a=10;
func();
function func(){
	var b=20;
	console.log(a);   //undefined
	console.log(b);   //20
	var a=30;
}

//预解析过程
var a;
function func(){
	var b;
	var a;
	b=20;
	console.log(a);   //undefined
	console.log(b);   //20
	a=30;
}
a=10;
func();
func();    //9 9 9 9 9 报错
console.log(c);    
console.log(b);    
console.log(a);    
function func(){
	var a= b= c=9;
	console.log(a); 
	console.log(b); 
	console.log(c); 
}

//预解析过程
function func(){
	var a;
	a=9;
	b=9;
	c=9;
	console.log(a);   //9
	console.log(b);   //9
	console.log(c);   //9
}
func();
console.log(c);    //9
console.log(b);    //9    b c未声明赋值,为全局变量
console.log(a);    //报错
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:21:48  更:2022-05-11 16:25:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:56:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码