写多了vue和react,你是否还记得那个最初的原生JS呢? 惭愧我的 今天开始复习一下原生知识,也顺便也一些笔记,留给以后时常回忆,笔记内容是看着教学视频抄的,如有错误,欢迎指正
求阶乘
function nums(a){
if(a === 1 || a === 0){
return 1;
}
return a*nums(a-1)
}
console.log(nums(5)) // 120
斐波那契数列
function nums(a){
if(a === 1){
return ;
}
return nums(a-1)+nums(a-2)
}
console.log(nums(5))
预编译
一.JS执行过程
1.语法分析
2.预编译
3.解释执行
二.预编译过程
1.简单规则:
函数声明,整体提升
变量声明, 声明提升
2.编译过程
1.创建AO对象
2.找到形参和变量声明,将变量和形参名 最为AO属性名 值位undefined
3.将实参值和形参统一
4.在函数体里面找到函数声明,值赋予函数体
3.示例
function a(a){
console.log(a) // function
var a = 123
console.log(a) // 123
function a(){}
console.log(a) // 123
var b = function (){}
console.log(b) //function
}
a(1)
//执行步骤分析
//1.创建AO对象
AO {
}
//2.找到形参和变量声明,将变量和形参名 最为AO属性名 值位undefined
Ao {
a: undefined,
b: undefined
}
//3.将实参值和形参统一
Ao {
a: 1 , // a 先被赋值为调用的 形参的值 1
b: undefined // 这里的 函数 b 不会被提升,因为 函数b 是函数表达式,只提升变量
}
// 4.在函数体里面找到函数声明,值赋予函数体
Ao {
a: 1 -> function a(){}, // function a(){} 这里 注意: function a(){} 是函数声明
b: undefined // 这里的 函数 b 不会被提升,因为 函数b 是函数表达式,只提升变量
}
4.示例
function test (a, b){
console.log(a) // 第一个 1
c = 0
var c;
a = 3;
b = 2;
console.log(b) // 第二个 2
function b(){}
function d(){}
console.log(b) // 第三个 2
}
test(1)
5.示例
function test (a, b){
console.log(a) // function a(){}
console.log(b) // undefined
var b = 234
console.log(b) // 234
a = 123
console.log(a) // 123
function a(){}
var a;
b = 234;
var b = function(){}
console.log(a) // 123
console.log(b) // function(){}
}
test(1)
6.示例
global = 100;
function fn(){
console.log(global) // undefined
global = 200
console.log(global) // 200
var global = 300
}
fn()
7.示例
function test(){
console.log(b) //undefined
if(a){
var b = 100
}
c = 123
console.log(b) //undefined
}
var a;
test();
a = 10;
console.log(c) //123
8.隐式转换
console.log(typeof(a)) // "undefined"
console.log(typeof(null)) //object
// !!" " => true
// !!"" => false
if(typeof(a)&& -true + (+undefined)+""){
/**
* typeof(a) 'undefined'
* -true -1
* +undefined NAN
* -true + (+undefined)+"" "NAN"
**/
// 因此 整个IF语句是true
console.log(1)
}
闭包
但凡是内部的函数被保存到了外部,就会形成闭包
function a(){
var aa = 0
function b(){
aa++
console.log(aa)
}
return b;
}
// a()() 1
// a()() 1
let demo = a()
demo() //1
demo() //2
function test(){
var num = 100
function a(){
num++
console.log(num) //101
}
function b(){
num--
console.log(num) //100
}
return [a,b]
}
var mtArr = test()
mtArr[0]()
mtArr[1]()
立即执行函数
(function(){
var a= 123
var b= 456
console.log(a+b)
}())
+function(){}()
var test = function(){}()
//这样不能执行,且报错
function(){
}()
//这样不能执行,但是不报错
function(a,b,c){
}(1,2,3)
function test (){
var arr = []
for(var i=0;i<10;i++){
arr[i] = function(){
console.log(i)
}
}
return arr;
}
var myArr = test()
myArr[0]() // 10
myArr[1]() // 10
// 改写
function test (){
var arr = []
for(var i=0;i<10;i++){
(function(i){
arr[i] = function(){
console.log(i)
}
}(i))
}
return arr;
}
var myArr = test()
myArr[0]() // 0
myArr[1]() // 1