未赋值时时 undefined
/**
* 声明式 的函数预解析时,整个函数将被提升到script标签内的最上面
* 赋值式 的函数预解析时,将复制的变量提升到script标签内的最上面,后面的赋值函数忽略
* */
//第一种 赋值式
// now()
var now = function() {
console.log("aa")
}
now()
//提示:赋值式--Uncaught TypeError: now is not a function
name()
//第二种 声明式
function name(params) {
console.log("bb")
}
name()
//提示:声明式--放到上面和下面不会影响
//错误示范!!!!!
var name = 10
function name() {
console.log("bb")
}
// name()
//提示: Uncaught TypeError: name is not a function 原因name和上面定义的名字重复成为var 定义的变量 所以提示不是函数
预解析
//预解析
console.log(a) //由于变量的预解析 此处输出 undefined
var a = 100
console.log(a) //由于上面已经赋值 此处输出 100
全局作用域与局部作用域
/**
* 作用域:全局作用域 和局部作用域
* 全局作用域 :整个页面页面关闭全局作用域也会消失
* 局部作用域 : 全局作用域中有划分出小范围的作用域,函数内部可以创建局部作用域,到目前为止,只有函数可以创建局部变量
* 全局变量可以在函数内部进行访问,但函数内部定义的变量,不能在函数外部进行访问
*/
var a = "张三" //全局作用域
function b() {
var a = "李四" //局部作用域
return result = 10 + 20
// result
}
console.log(b())
a = 100 在局部变量中 不加var 可以转化成全局变量
function name() {
a = 100
}
name()
console.log(a) //自动转化成全局变量
本文探讨了JavaScript中的函数预解析原理,区分了声明式和赋值式的区别,并讲解了全局作用域与局部作用域的规则,特别强调了变量提升现象及其可能导致的错误。
878

被折叠的 条评论
为什么被折叠?



