js基础(函数,递归,预编译,作用域)

观看渡一教学视频做的笔记,加强基础知识。

1. 函数

函数声明:
function theFirstName () { }
document.write(theFirstName) //打印的是整个function theFirstName () { }
theFirstName.name 为theFirstName

函数表达式:
var test = function abc () { }
打印test是整个函数function abc () { };打印abc报错
test.name 为abc

var test = function () {}
test.name 为 test

形参和实参位数可以不对映

function sum (a,b) {
	console.log(arguments) //实参的值,结果为[1,2,3]
	console.log(sum.length) //形参的长度 结果为2
	a = 2;
	console.log(arguments[0]) //为2
	arguments[0] = 3;
	console.log(a) //为3
	//a与arguments[0]为相互映射的关系,一个变另一个也响应的变
	//如果形参多了,就不存在映射关系
}
sum(1,2,3)

练习:
将输入的字符串倒序排列;

function reverse () {
	var num = window.prompt('input');
	var str = '';
	for (var i = num.length-1; i <= 0; i--) {
		str += num[i];
	}
}

2. 递归

n的阶层:规律 n!= n * (n-1)!
1.找规律
2.找出口

function jc (n) {
	if (n == 1 || n == 0) {return 1}
	return n * jc(n-1);
}
jc(5);

实现斐波那契数列
fb(n) = fb(n-1) + fb(n-2);

function fb (n){
	if (n == 1 || n == 2) {
		return 1;
	}
	return fb (n-1) + fb(n-2)
}

3. 作用域精解

js的两个特点:
1.单线程
2.解释性语言:翻译一行,执行一行;

  • 执行前会通篇扫描一遍,看是否有语法错误;
  • 然后执行预编译
  • 最后翻译一行,执行一行;

预编译
函数声明整体提升;
变量 声明提升;(但这两句话不能解决所以问题)

test();
function test () {}

console.log(a) // a为undefined,其实提升为var a;
var a = 3;

声明的全局变量归window所有,未经声明的全局变量也归window所有;(window就是全局的域)
如:a = 3;// window.a 为3
如:var a = 3; // window.a 也为3

var a = b = 3; // 过程为把3赋给b,然后声明a,然后把b的值赋给a

预编译过程的四部曲
1.创建AO对象
2.找形参和变量声明,把变量和形参名做为AO的属性名,值为undefined;
(变量声明:例如var a = 1;var b = function(){})
3.将实参值和形参统一;
4.在函数体里面找函数声明,值赋予函数体;
(函数声明:例如function d() {})

预编译发生在函数执行的前一刻;
在这里插入图片描述
在这里插入图片描述
AO没有找Go,函数体里面有if判断,也遵守变量提升;

4. 作用域精解

在这里插入图片描述
在这里插入图片描述
具体的看视频课时16
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值