javascript不在safari中运行

javascript不在safari中运行,javascript,php,safari,Javascript,Php,Safari,我有一个有趣的问题。由于某些原因,Safari浏览器上的javascript逻辑门无法正常工作。以下是分项数字: 使用$(#id).load(my/script.php)函数调用整个脚本 我创造了一个干净的世界 $perm=$\u POST['permission'] 我创建html变量 $html\u内容。=“ 我回显html <?=$html_content?> 基于权限ai更改我在div中应用的bsview函数的功能 if ("<?=$perm?>" != "

我有一个有趣的问题。由于某些原因,Safari浏览器上的javascript逻辑门无法正常工作。以下是分项数字:

使用
$(#id).load(my/script.php)
函数调用整个脚本

我创造了一个干净的世界

$perm=$\u POST['permission']

我创建html变量

$html\u内容。=“

我回显html

<?=$html_content?>

基于权限ai更改我在div中应用的bsview函数的功能

if ("<?=$perm?>" != "user"){
  function bsview(id) {
    console.log('manager');
  } 
}else{
 function bsview(id) {
    console.log('user_view');
 }
}
if(“!=”用户”){
功能视图(id){
console.log('manager');
} 
}否则{
功能视图(id){
console.log('user_view');
}
}
然后发生了一些有趣的事情。在签入Chrome、IE和Firefox之后,我确认代码正在工作。但是当我在Safari中运行代码时,应该返回“TRUE”的逻辑门不等于“user”,而是返回FALSE。 这是我的Safari调试工具中的代码

if ("manager" !== "user"){
  console.log('manager');

  function bsview(id) {
    console.log('manager');
  }

}else{
  function bsview(id) {
    console.log('user_view');

  }
}
</script>
if(“管理者”!=“用户”){
console.log('manager');
功能视图(id){
console.log('manager');
}
}否则{
功能视图(id){
console.log('user_view');
}
}
当然,it控制台会记录“用户\视图”

好的。如果有人对我糟糕的代码有任何见解或批评,请告诉我。我很想知道为什么会发生这种情况,以及如何避免同样的事情发生。

根据

将函数声明放在
if/else
内是无效的。您应该在
if
外声明函数名,然后分配给它

var bsview;
if ("<?=$perm?>" != "user"){
  bsview = function (id) {
    console.log('manager');
  } 
}else{
 bsview = function (id) {
    console.log('user_view');
 }
}
var-bsview;
如果(“!=”用户”){
bsview=功能(id){
console.log('manager');
} 
}否则{
bsview=功能(id){
console.log('user_view');
}
}
或者您可以将其简化为:

function bsview(id) {
    console.log('<?= $perm == "user" ? 'user_view' : 'manager' ?>');
}
功能视图(id){
控制台日志(“”);
}
根据

将函数声明放在
if/else
内是无效的。您应该在
if
外声明函数名,然后分配给它

var bsview;
if ("<?=$perm?>" != "user"){
  bsview = function (id) {
    console.log('manager');
  } 
}else{
 bsview = function (id) {
    console.log('user_view');
 }
}
var-bsview;
如果(“!=”用户”){
bsview=功能(id){
console.log('manager');
} 
}否则{
bsview=功能(id){
console.log('user_view');
}
}
或者您可以将其简化为:

function bsview(id) {
    console.log('<?= $perm == "user" ? 'user_view' : 'manager' ?>');
}
功能视图(id){
控制台日志(“”);
}

您不能在Javascript中有条件地定义函数声明。函数声明被提升到包含函数级别的作用域,因此定义了两个函数,但由于它们具有相同的名称,最后一个函数优先。如Barmar所示,您可以使用函数赋值。您不能有条件地定义函数声明在Javascript中。函数声明被提升到包含函数级别的作用域,因此定义了两个函数,但由于它们具有相同的名称,最后一个优先。正如Barmar所示,您可以使用函数赋值。谢谢。我想我必须这样做。我只是不知道Safari会做出不同反应的原因。谢谢谢谢你的帮助。我想我必须这么做。我只是不知道为什么Safari会有不同的反应。谢谢你的帮助。