js函数内调用函数,被调用的函数获取不到变量

function dy(){
clog(str)
}

function fn(){
let str = 'str'
dy()
}

fn()

会报错,str is not defined

请问这是为啥呀

let 定义的变量只在{}内

如果不在函数外部声明变量,就要用形参传入



function dy(str){
clog(str)
}

function fn(){
let str = 'str'
dy(str)
}

fn()

let是块作用域,所谓块作用就是控制流程语句的有效范围。如果我们控制流程语句中使用let定义一个变量,那么我们在控制流程语句外是无法访问这个变量的。
针对你的代码str定义方法fn内,所以str只在fn方法内有效,当执行dy方法时,str由于为块作用域变量,所以会失效,进而undefined
修改方法:
(1)直接传入方法,使得str被dy可见

function clog(str) {
  console.log(str)
}
function dy(str){
  clog(str)
}

function fn(){
let str = 'str'
dy(str)
}
 
fn()

(2)或者删除let,将str定义为全局变量

function clog(str) {
  console.log(str)
}
function dy(){
  clog(str)
}

function fn(){
str = 'str'
dy(str)
}
 
fn()

您的采纳就是我最大的动力,谢谢

img

str is not defined 函数没有参数
就像你写的第一个里面clog(str) 就有
同理dy() 里面也该有参数得

你使用的是let啊