前段时间忘了在哪看到过好多括号套函数的写法,出于好奇就去百度搜了搜,那是第一次初步认识了自执行函数,今天在写项目的时候,突发奇想想用一下,就去又去百度了一下,知道了大概用法
之前渲染echarts都是这样的,先定义,后调用
function getEcharts () {
var outputEcharts = echarts.init(document.getElementById('echartsDom'));
var outputEchartsOption = {
//xxx
};
outputEcharts.setOption(outputEchartsOption);
}
getEcharts()
自执行函数格式是这样的
(function (){
console.log("ok")
}())
当时我的理解就是在原本的函数之后加个 () ,然后整体再加个()
在这个基础上,我改造了一下我的渲染echarts代码
(function getEcharts () {
var outputEcharts = echarts.init(document.getElementById('echartsDom'));
var outputEchartsOption = {
//xxx
};
outputEcharts.setOption(outputEchartsOption);
}())
运行一下,成功的跑起来了,也没有报错
当时就想写完项目把这个自执行函数在CSDN上记录下来,就又去百度仔细的看了几篇大佬的说明,结果发现了一个问题,有人说自执行函数执行完之后会销毁,这可不行啊,我这个echarts渲染不仅仅是渲染一次的,每次数据改变都要重新渲染的,带着这个问题,我又回到了我的代码里,想测试一下自执行函数是否真的会销毁
(function getEcharts () {
var outputEcharts = echarts.init(document.getElementById('echartsDom'));
var outputEchartsOption = {
//xxx
};
outputEcharts.setOption(outputEchartsOption);
}())
getEcharts () // getEcharts is not defined
(function getEcharts () {
var outputEcharts = echarts.init(document.getElementById('echartsDom'));
var outputEchartsOption = {
//xxx
};
outputEcharts.setOption(outputEchartsOption);
}())
setInterval("getEcharts();", 1000) // getEcharts is not defined
// getEcharts is not defined
// getEcharts is not defined
额...真的是会销毁的,执行完了之后这个函数就没了...
最后还是换回了之前的写法,起码我这个功能,不太适合自执行函数
收获颇多,初识自执行函数